2017-10-09 16:33:02 CrazyDuang 阅读数 1420

1.UITableview UICollectionView MJRefresh下拉刷新错乱

    [UITableView appearance].estimatedRowHeight = 0;
    [UITableView appearance].estimatedSectionHeaderHeight = 0;
    [UITableView appearance].estimatedSectionFooterHeight = 0;
    if (@available(iOS 11, *)) {
        [UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; //iOS11 解决SafeArea的问题,同时能解决pop时上级页面scrollView抖动的问题
    }

2.定位权限的授权

ios11开始,不管你是需要在使用时定位还是后台一直定位,.plist文件里面必须将Privacy - Location Always and When In Use Usage Description、Privacy - Location When In Use Usage Description、Privacy - Location Usage Description这几个key添加进去,如果需要后台持续定位需要添加Privacy - Location Always Usage Description这个key,如果没有key没有添加完整系统则不会弹出允许定位的那个提示框,则无法授予定位权限.

如图:

现在授权可以由用户选取了,更加人性化.


3.UIScrollerView的contentInsetAdjustmentBehavior

IOS11 之前,不想让scrollView偏移64px,设置automaticallyAdjustsScrollViewInsets=NO就可以了。IOS11以后就废弃了,使用scrollView的属性contentInsetAdjustmentBehavior来防止偏移。

UIScrollViewContentInsetAdjustmentAutomatic
UIScrollViewContentInsetAdjustmentScrollableAxes
UIScrollViewContentInsetAdjustmentNever
UIScrollViewContentInsetAdjustmentAlways

这里我们直接选Never就可以了,可以参照上面的点1 在Appdelegate-didFinishLaunchingWithOptions里面进行全局设置.

if (@available(iOS 11, *)) {
        [UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; //iOS11 解决SafeArea的问题,同时能解决pop时上级页面scrollView抖动的问题
    }

4.iphoneX的导航条,状态条的尺寸

因为iphoneX刘海的出现,X上面的状态栏的高度从20变成44,整个导航条的高度就变成了88.底部tabbar变为了49+34,其余机型还是跟以前一样.如果项目里隐藏了导航栏加了自定义按钮之类的,这里需要注意适配一下.


现在就遇到这些坑,欢迎大家指正补充,后续遇到会继续怼上来滴!!!

2017-09-18 11:11:23 PRESISTSI 阅读数 16712

IOS11正式版马上就要发布了,是时候适配一波了。下面就来说说我适配过程中遇到的坑吧。

  • UITableView:默认开启Self-Sizing

    首先要知道Self-Sizing是个什么东东。看官方文档的解释:

    Self-Sizing

    大概就是说我们不再需要自己去计算cell的高度了,只要设置好这两个属性,约束好布局,系统会自动计算好cell的高度。IOS11以后,Self-Sizing默认开启,包括Headers, footers。如果项目中没使用estimatedRowHeight属性,在IOS11下会有奇奇怪怪的现象,因为IOS11之前,estimatedRowHeight默认为0,Self-Sizing自动打开后,contentSize和contentOffset都可能发生改变。可以通过以下方式禁用:

    self.tableView.estimatedRowHeight = 0;
    self.tableView.estimatedSectionHeaderHeight = 0;
    self.tableView.estimatedSectionFooterHeight = 0;

  • NSLocationAlwaysAndWhenInUseUsageDeion

    在IOS11,原有的NSLocationAlwaysUsageDeion被降级为NSLocationWhenInUseUsageDeion。因此,在原来项目中使用requestAlwaysAuthorization获取定位权限,而未在plist文件中配置NSLocationAlwaysAndWhenInUseUsageDeion,系统框不会弹出。建议新旧key值都在plist里配置,反正我试下来是没有问题,唯一的区别是使用requestAlwaysAuthorization获取权限 IOS11系统弹框会把几种权限级别全部列出,供用户选择,显然更人性化了哈~~

    定位

  • UIScrollViewContentInsetAdjustmentBehavior

    IOS11 之前,不想让scrollView偏移64px,设置automaticallyAdjustsScrollViewInsets=NO就可以了。IOS11以后就废弃了,使用scrollView的属性contentInsetAdjustmentBehavior来防止偏移。

    UIScrollViewContentInsetAdjustmentAutomatic
    UIScrollViewContentInsetAdjustmentScrollableAxes
    UIScrollViewContentInsetAdjustmentNever
    UIScrollViewContentInsetAdjustmentAlways

    这里我们直接选Never就可以了

以上就是我项目中适配IOS11遇到的坑,后续有坑继续来填…

更新:


  • Navigation Bar

navigation bar 的titleView支持了autolayout,需要titleView自己撑开或者重写了- intrinsicContentSize方法。intrinsicContentSize顾名思义,固定大小的意思,主要是解决一些模糊约束的问题。更多知识可以看这篇文章详解intrinsicContentSize
不做适配在IOS11会遇到的问题:

titleView对应的View大小和预期不一致。
titleView对应的View有点击事件会无法触发

解决方法是直接重写titleView对应View的intrinsicContentSize方法

- (CGSize)intrinsicContentSize {
return UILayoutFittingExpandedSize;
}

2017-12-22 15:05:23 Maxdong24 阅读数 1017

安全区域(Safe Area)
在iOS11以前, 自定义UIViewController时, 从来没有考虑过topLayoutGuide和bottomLayoutGuide这两个属性.但是在iOS11出来之后,这两个属性被废弃,取而代之的就是safeArea的概念,safeArea是描述你的视图部分不被任何内容遮挡的方法。 它提供两种方式:safeAreaInsets或safeAreaLayoutGuide来提供给你safeArea的参照值,即 insets 或者 layout guide。 safeArea区域如图所示:

iPhone X图
在除了iPhone X以外的型号手机上, UINavigationController 就是 topLayoutGuide区域. UITabBarController就是bottomLayoutGuide.但是这两个属性在iOS11已经被取代了. 取而代之的就是safeArea区域(iPhone X图区域4部分)

当我们自定义一个UIViewController, 内部嵌套了UINavigationController 或者UITabBarController的时候. 运行程序会出现以下错误:

图1-1
原因是少了:

具体是为什么,没有细研究.不过解决办法如下:

图1-2
因为我是创建的空项目所以只有LaunchScreen.storyboard..如果你的项目里还有Main.storyboard,那么 你需要把第四个勾勾也去掉.

iPhone X 竖屏UINavigationController和UITabBarController尺寸问题

iPhone X竖屏
区域一: 高度30

区域二:高度14

区域三:高度44

区域五:高度49

区域六:高度14

区域七:高度20

iOS横屏UITabBarController
更新iOS11以后, UITabBarController上的图标文字由原来的垂直放置, 变成水平放置

iPhone X 横屏UINavigationController和UITabBarController尺寸问题

iPhone X横屏
iPhone X 横竖屏在尺寸上有很多细微的差别.

UINavigationController
我们打印UINavigationController navigationBar的时候发现他的高度为44.也就是上图绿色区域.但是在实际显示的时候确实红色区域,高度为32.整个高度向上12.也就是蓝色区域.

UITabBarController
我们打印UITabBarController tabBar的时候发现他的高度为32,就是橘色区域,红色区域为功能区,高度为21.我们是何止tabBar颜色的时,包括橘色区和红色区.

控制大标题的显示
待更新

屏幕未充满?底部tabbar留白
解决方案: 准备一张尺寸:1125 * 2436的启动图片, 添加到Assret中

iOS11导航栏自定义按钮偏移问题
解决方案: 通过改变按钮的 contentEdgeInsets和imageEdgeInsets的值成功改变了按钮的偏移问题,单独设置contentEdgeInsets也可达到一定的效果。

UITableview UICollectionView MJRefresh下拉刷新错乱
解决方案:iOS11弃用了automaticallyAdjustsScrollViewInsets属性,新增contentInsetAdjustmentBehavior来替代它

2017-10-12 09:55:24 autom_lishun 阅读数 1461

1、iOS 11之前的导航栏的高度是64px(状态条+导航栏),iOS11之后如果设置了prefersLargeTitles = YES(默认NO)则为96pt。所以一般不用管。

2、在iOS 11上运行tableView向下偏移64px或者20px,因为iOS 11废弃了automaticallyAdjustsScrollViewInsets,而是给UIScrollView增加了contentInsetAdjustmentBehavior属性。避免这个坑的方法是要判断

1
2
3
4
5
if (@available(iOS 11.0, *)) {
_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}else {
self.automaticallyAdjustsScrollViewInsets = NO;
}

3、tableView的sectionHeader、sectionFooter高度与设置不符,因为tableView的estimatedRowHeight、estimatedSectionHeaderHeight、 estimatedSectionFooterHeight三个高度估算属性由默认的0变成了UITableViewAutomaticDimension。最简单的方法就是直接设置为0。

4、iPhone X状态条由20px变成了44px,UITabBar由49px变成了83px。设置布局时y直接写成64的就要根据机型设置。可以设置宏

#define Device_Is_iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO),

然后再设置。

2018-08-23 14:01:38 heipingguowenkong 阅读数 260

引言:之前公司没有提供测试机,于是就在自己的iPhone7 (系统 iOS11) 上做开发测试了,一切效果完好。然而市场部总反应有一些问题。。。最近老板拿了个iPhone6点开应用问题一堆,一看系统版本iOS8。我意识到是系统版本问题,于是开始了爬坑之路。。。

1.项目采用xib加代码的方式实现,在iOS11上面一切完好,iOS上只要涉及button之类的交互控件xib与所在类文件绑定实现的点击方法,一点即crash。经过分析发现,iOS11之前的绑定如下:
这里写图片描述
button在父view上需要绑定fileOwner、xib文件,点击方法绑在xib文件上,这样才能在类文件中操作button控件的属性及点击方法;而iOS8上却发现原来fileOwner绑定没了,所以点击按钮就会崩溃;解决办法X掉之前的所有绑定,重新绑定下以上三项就ok。
2. tableview的视图层次发生了变化,iOS11中cell的superView是tableView;iOS8中,cell的superView是UItableviewWrapView,所以项目中若用到cell的superView来获取其所在的tableView那么就会出现问题。这一点要注意。
3. 关于分组类型的tableView,在iOS8中设置了tableView为Group类型,如果不设置tableView的sectionView及sectionTitle,只设置sectionHeaderHeight,那么会默认隐藏掉第一组的sectionHeaderHeight,tableView内容不会向下偏移一个sectionHeaderHeight的高度,但是iOS11中则不会自动忽略第一组的组头高度,内容会向下偏移一个组头的距离,设置sectionHeaderHeight也无效;那么如何解决呢??如果用了分组样式,在tableView返回sectionHeaderView的方法里,给一个view,就可以完美解决。
4. 有导航栏的控制器内铺满屏幕的tableView内容无故向下偏移,或上移被导航栏遮挡,在iOS11中会默认处理tableview的布局不被遮挡,iOS8中则不会自动帮我们处理:需要我们手动设定控制器的这两个属性设定布局规则: self.automaticallyAdjustsScrollViewInsets = YES;
self.edgesForExtendedLayout = UIRectEdgeBottom;
第一个属性设定控制器自动处理滚动视图的内容布局,第二属性设置布局的原点为导航栏的左下角。

希望能帮到大家!

iOS11遇到的坑总结

阅读数 1581

ios填坑

阅读数 47

没有更多推荐了,返回首页