Bug如图所示:
这个Bug应该是由于iOS11新增的安全区功能出现的, 上图中青色背景ImageView约束如下:
可以看到iOS11把相对父View的约束都变成了相对安全区的约束, 而状态栏对应的安全区和我们的目标布局冲突. 我尝试过修改安全区, 结果并不理想. 目前的解决方法是尽量不要使用上边相对安全区的约束, 比如改成下面这样:
同时由于所有的UILabel都是相对icon布局, 所以我只要改动icon的约束就可以.
修改前:
修改后:
最终效果:
/=============华丽的分割线=============/
iOS11之前'vc.automaticallyAdjustsScrollViewInsets'修改为了'scrollview.contentInsetAdjustmentBehavior'. 在ScrollView内容向下偏移20或64像素的时候, iOS11需要设置'scrollview.contentInsetAdjustmentBehavior'. 下面是来自一位大神(查不到了...)一个适配的宏
#define adjustsScrollViewInsets_NO(scrollView,vc)\
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
if ([UIScrollView instancesRespondToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")]) {\
[scrollView performSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:") withObject:@(2)];\
} else {\
vc.automaticallyAdjustsScrollViewInsets = NO;\
}\
_Pragma("clang diagnostic pop") \
} while (0)