踩坑小结

一. tableview的顶部有位移偏差

踩坑小结_第1张图片

我们知道cell是layout在UITableView的subview :UITableViewWrapperView上的,通过view Hierarchy可以看到有错位的实际上是UITableViewWrapperView。

automaticallyAdjustsScrollViewInsets,当设置为YES时(默认YES),如果视图里面存在唯一一个UIScrollView或其子类View,那么它会自动设置相应的内边距,这样可以让scroll占据整个视图,又不会让导航栏遮盖。

当controller上的第一个子视图不是scrollview以及其子类的时候,就会取消内边距。此时原本全屏的scrollview设置的frame(0,0,self.view.frame.size.width,xx)就会从状态栏开始算起,如果应用有导航栏的话,那么就会遮盖住视图的64个高度

解决方案:
1.

self.automaticallyAdjustsScrollViewInsets = NO//禁用掉自动设置的内边距,自行控制controller上index为0的控件以及scrollview控件的位置

2.

self.edgesForExtendedLayout = UIRectEdgeNone;
    //这种方式设置,不需要再重新设置index为0的控件的位置以及scrollview的位置,(00)默认的依然是从导航栏下面开始算起

参考资料

补充:
当升级到iOS 11的时候,发现UIScrollView 又出现莫名其妙的偏移了 可是明明设置了

automaticallyAdjustsScrollViewInsets

这是因为iOS 11为UIScrollView 添加了新的属性contentInsetAdjustmentBehavior 这是一个枚举

找到UIScrollViewContentInsetAdjustmentNever 从来不自动调整和automaticallyAdjustsScrollViewInsets = NO 是一个功效 这样就解决了iOS 11这个bug

        if (@available(iOS 11.0, *)) {

            Scrollview.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

        } else {

            // Fallback on earlier versions

        }

二. 真机编译报错:dyld: Library not loaded: @rpath/xxx.framework/…

同事在升级Xcode9之后,从git上pull最新项目代码,模拟器编译运行正常,跑真机(iPhoneSE和iPhone7P)报错如下

dyld: Library not loaded: @rpath/JSONModel.framework/JSONModel
Referenced from: /Users/Savita/Library/Developer/CoreSimulator/Devices/3E53CBD1-C475-465C-ADE5-84C2248E134F/data/Containers/Bundle/Application/E8A12E93-1820-401B-B687-87D8F752F812/ProjectName.app/Frameworks/CitrusPay.framework/CitrusPay Reason: image not found

尝试:
pods update更新JSONModel,
Link Binary With Libraries重新添加framework,
Target->General->Embedded Binaries添加framework,
重新配置证书和描述文件,
重启Xcode,真机,mac
依然报错。
最后通过删除/Users/用户名/Library/Developer/Xcode/DerivedData 路径下的项目缓存文件,重启xcode。
问题得以解决。
具体原因不是很清楚,应该跟Xcode版本升级,旧项目缓存有关。

你可能感兴趣的:(笔记,布局)