UIScrollView在操作过程中出现页面下调20px或者其他的页面显示的问题
开发中遇到的视图跳动
在开发中经常会遇到UITableView或UIScrollView的显示会跳动,然后网上去查一般都会有一些常规处理方法
自动适配UIScrollView的属性
在UIViewController中有自动适配UIScrollView的属性automaticallyAdjustsScrollViewInsets,默认是YES,意思就是在加载UIScrollView时(包括它的子类UITableView和UIScrollView),系统会自动去适配,所以如果我们在设置在存在冲突就会造成视图的显示乱位问题。所以一般情况下可以把它设置成NO就可以了。self.automaticallyAdjustsScrollViewInsets=NO;
导航栏的半透明属性(translucent)
在iOS 6开始,导航栏就增加半透明属性(translucent),当使用导航栏时,会因为导航栏的变动造成视图的显示乱位问题.默认显示为NO。self.navigationController.navigationBar.translucent=YES
UIViewController的边缘布局属性UIRectEdge
UIRectEdge是个枚举,可固定左右上下的边缘
@requires_authorization
typedef NS_OPTIONS(NSUInteger, UIRectEdge) {
UIRectEdgeNone = 0,
UIRectEdgeTop = 1 << 0,
UIRectEdgeLeft = 1 << 1,
UIRectEdgeBottom = 1 << 2,
UIRectEdgeRight = 1 << 3,
UIRectEdgeAll = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight
} NS_ENUM_AVAILABLE_IOS(7_0);
self.edgesForExtendedLayout = UIRectEdgeNone;
iOS 11的系统 之后却发现以前几点可也无法解决
在iOS 11出现后,我在上面运行却发现设置automaticallyAdjustsScrollViewInsets却是无效的,我是为什么了?
原来从iOS 11开始,苹果出了iPhone X全面屏手机,上面有了刘海,布局适配方式就有所变化,automaticallyAdjustsScrollViewInsets就不起作用了。但是他新推出了contentInsetAdjustmentBehavior的属性来适配contentInsetAdjustmentBehavior也是个枚举
typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) {
UIScrollViewContentInsetAdjustmentAutomatic,
UIScrollViewContentInsetAdjustmentScrollableAxes,
UIScrollViewContentInsetAdjustmentNever,
UIScrollViewContentInsetAdjustmentAlways
} API_AVAILABLE(ios(11.0),tvos(11.0));
所以需要判断版本号进行设置:
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
- iOS 11的安全区域safeAreaInsets
配置iOS11系统的iPhone X手机因为有了刘海,采用safeAreaInsets来获取刘海上方的安全边缘UIEdgeInsets值,需要注意的是非iPhone X上的insets.top是0,而且iPhone X上的insets.top为44.0,而这个值应该只是状态栏的高度为44。
需要注意的是safeAreaInsets只是在iOS11的系统上才用,之前的系统会崩溃
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.never
let insets = UIApplication.shared.delegate?.window??.safeAreaInsets ?? UIEdgeInsets.zero
} else {
automaticallyAdjustsScrollViewInsets = false
}
以上就是我遇到的相关适配问题!