第一次写简书,不知道该怎么写,就自己在iOS11开发遇到的坑说一下(说明一下,我还是个菜鸟,有什么写得不对的欢迎提出来,共勉。。。)。
关于UIScrollView的一些坑
我在开发的时候遇到过(先说明一下,我的导航栏是系统导航栏),当从一个有scrollview的界面,简单来说,我的首页有一个tableview的列表,点击其中一个进入到内页,侧滑返回的时候发现内容是在往上移的,于是问了各路大神,奈何大神们要么忙,要么说没有遇到过这个问题,于是就是去看了iOS11之后UIScrollView的一些变化,查了资料,抱着试一试的心理,在AppDelegate里面加上了一句代码
if (@available(iOS 11.0, *)) {
?? ? ? ?UIScrollView.appearance.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
后面这个代码也是下一个问题需要用到的
? ? ? ? [[UISearchBar appearance] setSearchFieldBackgroundImage:[self searchFieldBackgroundImage] forState:UIControlStateNormal];
? ? }
,加上代码再运行发现就可以了。
那么接下来说上面第二句代码的用处,我的项目有个地方是在导航栏上面放了一个UISearchBar,在iOS11之前是没有什么问题的,但是在适配iPhone X 的时候发现,怎么有UISearchBar的地方导航栏这么高,而且UISearchBar的高度也变高了,导航栏是被撑高的??
通过一番查资料,发现iOS11默认的导航栏是好像是36还是多少的,而iOS11之前是28,所以导航栏变壮了。。。为了统一,我得改变它的高度,所以上面的第二句代码就用上了
#pragma mark - searchFieldBackgroundImage iOS 11 调用方法
- (UIImage*)searchFieldBackgroundImage {
? ? UIColor*color = [UIColor whiteColor];
? ? CGFloat cornerRadius = 14;//圆角
? ? CGRect rect =CGRectMake(0,0,28,28);//高度,我设为28
? ? UIBezierPath*roundedRect = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
? ? roundedRect.lineWidth=0;
? ? UIGraphicsBeginImageContextWithOptions(rect.size,NO,0.0f);
? ? [color setFill];
? ? [roundedRect fill];
? ? [roundedRect stroke];
? ? [roundedRect addClip];
? ? UIImage *image =UIGraphicsGetImageFromCurrentImageContext();
? ? UIGraphicsEndImageContext();
? ? return image;
}
这是AppDelegate里面的方法。
然后在需要用到UISearchBar的地方再加上一下代码
if(@available(iOS 11.0, *)) {
? ? ? ? [[_searchBar.heightAnchor constraintEqualToConstant:44] setActive:YES];
? ? ? ? UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
? ? ? ? [txfSearchField setDefaultTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]}];
? ? }
搞定。
这两天又发现一个问题,据说之前用iPhone X测试是没有出现的,重点是iOS11.2也是没有这个问题的,然而,iOS11.1出现啦,就是从首页进入内页的时候标签栏下面会出现一块黑色区域,奇了怪了,怎么两部iPhone X测试一个会出现黑色块一个不会出现,难道iOS11.1和11.2又有区别?后面查资料说是标签栏上移,神马情况。。。贴代码:
CGRect frame = self.tabBarController.tabBar.frame;
? ? frame.origin.y = [UIScreen mainScreen].bounds.size.height - frame.size.height;
? ? self.tabBarController.tabBar.frame = frame;
再一试,可以了。。。啊哈,今天就先写到这里,第一次写简书,忘大家多多指教