Bug如圖所示:
這個(gè)Bug應(yīng)該是由于iOS11新增的安全區(qū)功能出現(xiàn)的, 上圖中青色背景ImageView約束如下:
可以看到iOS11把相對(duì)父View的約束都變成了相對(duì)安全區(qū)的約束, 而狀態(tài)欄對(duì)應(yīng)的安全區(qū)和我們的目標(biāo)布局沖突. 我嘗試過(guò)修改安全區(qū), 結(jié)果并不理想. 目前的解決方法是盡量不要使用上邊相對(duì)安全區(qū)的約束, 比如改成下面這樣:
同時(shí)由于所有的UILabel都是相對(duì)icon布局, 所以我只要改動(dòng)icon的約束就可以.
修改前:
修改后:
最終效果:
/=============華麗的分割線=============/
iOS11之前'vc.automaticallyAdjustsScrollViewInsets'修改為了'scrollview.contentInsetAdjustmentBehavior'. 在ScrollView內(nèi)容向下偏移20或64像素的時(shí)候, iOS11需要設(shè)置'scrollview.contentInsetAdjustmentBehavior'. 下面是來(lái)自一位大神(查不到了...)一個(gè)適配的宏
#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)