iOS11适配笔记

  1. 导航栏的titleView需要自定义View,并实现
    - (CGSize)intrinsicContentSize {
    return UILayoutFittingExpandedSize;
    }
    (注意,多层view时,底层需要放一个View承载)

2.导航栏左侧和右侧按钮不能为view,最好为button

3.导航栏下移的话使用下面的代码。。还有tableview的安全区
// automaticallyAdjustsScrollViewInsets属性被废弃了,顶部就多了一定的inset,关于安全区域适配
// 导航栏差20pt 或
if (@available(iOS 11.0, *)) {
self.baseTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
// self.baseTableView.estimatedRowHeight = 0;
// self.baseTableView.estimatedSectionHeaderHeight = 0;
// self.baseTableView.estimatedSectionFooterHeight = 0;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}

4.所以如果你的项目是自定义的navigationBar,那么在iOS11上运行就可能出现布局错乱的bug,解决办法是重写UINavigationBar的layoutSubviews方法,调整布局,上代码:

  • (void)layoutSubviews {
    [super layoutSubviews];

    //注意导航栏及状态栏高度适配
    self.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), naviBarHeight);
    for (UIView *view in self.subviews) {
    if([NSStringFromClass([view class]) containsString:@"Background"]) {
    view.frame = self.bounds;
    }
    else if ([NSStringFromClass([view class]) containsString:@"ContentView"]) {
    CGRect frame = view.frame;
    frame.origin.y = statusBarHeight;
    frame.size.height = self.bounds.size.height - frame.origin.y;
    view.frame = frame;
    }
    }
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 安全区域适配总结 http://www.jianshu.com/p/efbc8619d56b //解决iOS11,...
    huangxiongbiao阅读 170评论 0 0
  • 导航栏 导航栏高度的变化 iOS11之前导航栏默认高度为64pt(这里高度指statusBar + Navigat...
    西门淋雨阅读 760评论 0 0
  • 临近毕业了,大家都想着要去毕业旅行,这好像已经成为大多数毕业生必不可少的环节。对啊,旅行很好,开阔眼界、了解不同的...
    陌上夏不夏阅读 836评论 2 5
  • 我特别喜欢讲信用的人,跟他们打交道有一种踏实感。 商业上,一个伟大的企业一定是讲诚信的,一个伟大的企业家也一定是讲...
    喜爱文字阅读 453评论 0 0
  • 脾气一样的人不适合在一起 知道对方的套路 但还是忍不住生气 脾气来了大神也是人
    一只不会飞的猫阅读 156评论 0 0