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
代码演示:
代码语言:javascript复制 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. 如何判断这个页面是消失了,还是进入了新的页面
代码语言:javascript复制- (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),
代码语言:javascript复制 [[UIApplacation shareApplication] openUrl :[NSUrl urlWithString:@"你的Schemes//"];
注意://是标识符,是必须得,前面是你自定义的schemes 然后不出什么意外的话你已经通过其他程序打开了你设置schemes的程序
7. iOS11中ScrollerView或者其子类占位 状态栏设置
在ios11系统下,如果tableview或者ScrollerView 是从0开始,需要做简单的适配
适配前
代码语言:javascript复制if (@available(iOS 11.0, *)) {
self.sc.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
适配后
8.iOS应用内集成AppStore评分功能
跳转到AppStore对应应用评论页面
iOS应用内集成AppStore评分功能
可评分评论,无次数限制
代码语言:javascript复制- (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.判断某一个对象是什么类
代码语言:javascript复制 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在原类中也有使用,效果和写在一个类中是一样的。