最近在做iOS11以及iPhone X 的適配,遇到的一點(diǎn)問題,簡(jiǎn)單記錄一下。
PS:模擬器我拖動(dòng)的時(shí)候老感覺拖不動(dòng) 原來要把就把鼠標(biāo)放到四個(gè)角的時(shí)候,才可以隨便拖動(dòng)
問題一、iPhone X 啟動(dòng)App齊劉海沒顯示
我的項(xiàng)目啟動(dòng)圖不是使用xib和SB適配的,結(jié)果在iPhone X上一啟動(dòng)起來就是這樣,請(qǐng)看下圖
圖一.png
解決方案
方案一:項(xiàng)目使用LaunchScreen.xib或者LaunchScreen.storyboard配置啟動(dòng)圖,這個(gè)大家都懂,就不做介紹了。
方案二:在LaunchImage 里面添加上iPhoneX的啟動(dòng)圖 規(guī)格為1125 × 2436
修改Contents.json文件,添加如下內(nèi)容
{
"extent": "full-screen",
"idiom": "iphone",
"subtype": "2436h",
"filename": "1125_2436.png",
"minimum-system-version": "11.0",
"orientation": "portrait",
"scale": "3x"
}
然后齊劉海就出來了,我看著齊劉海特別像牛角,挺可愛的,工程啟動(dòng)圖如下:
圖二.png
問題二:iOS11 的 UITableview UICollectionView MJRefresh下拉刷新顯示
iOS11表格用MJRefresh框架下拉刷新的時(shí)候界面會(huì)閃,顯示紊亂,
原因是iOS11棄用了automaticallyAdjustsScrollViewInsets屬性,新增contentInsetAdjustmentBehavior來替代它
_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
//聲明tableView的位置 添加下面代碼
if (@available(iOS 11.0, *)) {
_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
_tableView.contentInset = UIEdgeInsetsMake(64, 0, 49, 0);
_tableView.scrollIndicatorInsets = _tableView.contentInset;
}
問題三:iOS 11 自定義UINavigationBar適配問題,導(dǎo)航條向上偏移20點(diǎn)問題
解決方案 自己寫一個(gè)類 繼承UINavigationBar 重寫layoutSubviews方法改變frame即可。
Swift
override func layoutSubviews() {
super.layoutSubviews()
if #available(iOS 11.0, *) {
for itemView in subviews {
let albumClassName = NSStringFromClass(itemView.classForCoder)
if albumClassName.contains("Background"){
itemView.frame = bounds
} else if albumClassName.contains("ContentView"){
var frame = itemView.frame
frame.origin.y = 64 - 44
frame.size.height = bounds.size.height - frame.origin.y
itemView.frame = frame
}
}
}
}
OC
- (void)layoutSubviews {
[super layoutSubviews];
if (@available(iOS 11.0, *)) {
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 = 64 - 44;
frame.size.height = self.bounds.size.height - frame.origin.y;
view.frame = frame;
}
}
}
}