原因:controller里有个automaticallyAdjustsScrollViewInsets这个方法,默认为yes,当它为yes时如果视图里面存在唯一一个UIScrollView或其子类View,那么它会自动设置相应的内边距,这样可以让scroll占据整个视图,又不会让导航栏遮盖。当controller上的第一个子视图不是scrollview以及其子类的时候,就会取消内边距。此时原本全屏的scrollview设置的frame(0,0,self.view.frame.size.width,xx)就会从状态栏开始算起,如果应用有导航栏的话,那么就会遮盖住视图的64个高度。
所以我们controller里设置uiscrollView或者及其子类时如果不是第一个自视图,该控件的坐标为0是从状态栏算起的,而不是从导航栏开始。
解决方法:
self.automaticallyAdjustsScrollViewInsets = NO;禁用掉自动设置的内边距,自行控制controller上index为0的控件以及scrollview控件的位置self.edgesForExtendedLayout = UIExtendedEdgeNone;这种方式设置,不需要再重新设置index为0的控件的位置以及scrollview的位置,(0,0)默认的依然是从导航栏下面开始算起
注意:当controller中没有导航栏时,也就没有内边距,我们这时写tableView和uiscrollview时orgin.y不能从0算起了我们要从状态栏高度开始写!!!!(否则在ios11以下会出现界面整体上移20像素的效果)