最近在做iOS11以及iPhone X 的适配,遇到的一点问题,简单记录一下。
PS:模拟器我拖动的时候老感觉拖不动 原来要把就把鼠标放到四个角的时候,才可以随便拖动
问题一、iPhone X 启动App齐刘海没显示
我的项目启动图不是使用xib和SB适配的,结果在iPhone X上一启动起来就是这样,请看下图
图一.png解决方案
方案一:项目使用LaunchScreen.xib或者LaunchScreen.storyboard配置启动图,这个大家都懂,就不做介绍了。
方案二:在LaunchImage 里面添加上iPhoneX的启动图 规格为1125 × 2436
修改Contents.json文件,添加如下内容
{
"extent": "full-screen",
"idiom": "iphone",
"subtype": "2436h",
"filename": "1125_2436.png",
"minimum-system-version": "11.0",
"orientation": "portrait",
"scale": "3x"
}
然后齐刘海就出来了,我看着齐刘海特别像牛角,挺可爱的,工程启动图如下:
图二.png问题二:iOS11 的 UITableview UICollectionView MJRefresh下拉刷新显示
iOS11表格用MJRefresh框架下拉刷新的时候界面会闪,显示紊乱,
原因是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适配问题,导航条向上偏移20点问题
解决方案 自己写一个类 继承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;
}
}
}
}
网友评论