实践-小细节Ⅶ

1. iOS11中UIWebVIew

所以网页的y 坐标是 0 ,但是在 iOS 11里面就是无法在 状态栏上显示,iOS11下的系统不会这样会占用 状态栏的位置

2. iOS11中 Undefined symbols for architecture x86_64:

3.从APP中跳转到各种手机设置界面(亲测有效)

一些常用的设置里的位置:

  • 电池电量 Prefs:root=BATTERY_USAGE
  • 通用设置 Prefs:root=General
  • 存储空间 Prefs:root=General&path=STORAGE_ICLOUD_USAGE/DEVICE_STORAGE
  • 蜂窝数据 Prefs:root=MOBILE_DATA_SETTINGS_ID
  • Wi-Fi 设置 Prefs:root=WIFI
  • 蓝牙设置 Prefs:root=Bluetooth
  • 定位设置 Prefs:root=Privacy&path=LOCATION
  • 辅助功能 Prefs:root=General&path=ACCESSIBILITY
  • 关于手机 Prefs:root=General&path=About
  • 键盘设置 Prefs:root=General&path=Keyboard
  • 显示设置 Prefs:root=DISPLAY
  • 声音设置 Prefs:root=Sounds
  • App Store 设置 Prefs:root=STORE
  • 墙纸设置 Prefs:root=Wallpaper

代码演示:

   NSURL *url = [NSURL URLWithString:@"Prefs:root=Wallpaper"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        // 系统小于10的时候,打开Wi-Fi界面
        [[UIApplication sharedApplication] openURL:url];
    }else {
        // 系统大于10的时候直接打开当前App的设置界面
        if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
        }
    }

4.如何实现扫描一次蒲公英安装二维码后,内测版APP自动提示更新

本质实现方式都是集成 蒲公英的SDK。

iOS内测版实现自动检查更新 Android内测版实现自动检查更新

如果有更新版本则会提示用户前往更新,如图所示:

image

注:因操作系统限制,iOS 11及之后版本,当用户点击安装新版本后,会跳转到蒲公英应用单页。iOS 11以下,当用户点击安装新版本后仍然会在应用内直接开始安装。

5. 如何判断这个页面是消失了,还是进入了新的页面

- (void)viewWillDisappear:(BOOL)animated
{
      [super viewWillDisappear:YES];

  if ([[self.navigationController viewControllers] containsObject:self ]) {
        NSLog(@" 暂时消失");
  }else
  {
        NSLog(@" 出栈了");
    }
}

6.程序之间的相互调用

在我们的iOS开发中,我们常常会遇见在程序中打开第三方应用的功能,比如美团付款时打开支付宝,也就是程序之间的相互调用.

xcode-->targets -->info -->url type ** 点击加号,出现上图所示,identifer 写bundle Indentifer就可以,URL schemes是自定义的,随便写什么都可以,其余一样

在打开一个程序,(前提是你的设备上必须有刚设置好schems的那个app),

  [[UIApplacation shareApplication] openUrl :[NSUrl urlWithString:@"你的Schemes//"];

注意://是标识符,是必须得,前面是你自定义的schemes 然后不出什么意外的话你已经通过其他程序打开了你设置schemes的程序

7. iOS11中ScrollerView或者其子类占位 状态栏设置

在ios11系统下,如果tableview或者ScrollerView 是从0开始,需要做简单的适配

适配前

if (@available(iOS 11.0, *)) {
    self.sc.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}else {
    self.automaticallyAdjustsScrollViewInsets = NO;
}

适配后

8.iOS应用内集成AppStore评分功能

跳转到AppStore对应应用评论页面

iOS应用内集成AppStore评分功能

可评分评论,无次数限制

- (IBAction)appStoreComentBtnAction:(UIButton *)sender {`

NSString  * nsStringToOpen = [NSString  stringWithFormat: @``"itms-[apps://itunes.apple.com/app/id%@?action=write-review](apps://itunes.apple.com/app/id%@?action=write-review)"``,@``"AppID"``];//替换为对应的APPID`
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:nsStringToOpen]];`

}

9.判断某一个对象是什么类

 UIWindow *window = [[[UIApplication sharedApplication]delegate]window];
if ([vc isKindOfClass:[UITabBarController class]]) {
    window.rootViewController = vc;
}else{
     window.rootViewController = [[UINavigationController alloc]initWithRootViewController:vc];
} 

这里很容易错误的写法是: [vc.class isKindOfClass:[UITabBarController class]]

10.使用类别为父类实现功能分散管理

我们使用类别为父类实现功能分散管理:

  • 类别中除了不可以生成成员变量(增加新的属性),使用时完全可以把类别当成原类。
  • 类别中的方法优先调用,也就是会覆盖原类中的方法。
  • 类别可以直接访问原类 .h 中的属性和全局变量,以及倒入的头文件。
  • 如下图,新建一个BaseViewController的类别,不导入头文件,直接使用原类中的 block操作,并且这个block在原类中也有使用,效果和写在一个类中是一样的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区

领取腾讯云代金券