Swift - 当存在导航栏时,scrollview自动下移的问题解决
1,automaticallyAdjustsScrollViewInsets属性介绍
- automaticallyAdjustsScrollViewInsets 是 iOS7 后新增的属性,其默认值是 true。
- 当其为 true 时。控制器会根据所在界面的 statusbar、navigationbar、tabbar 的高度,自动调整 scrollview 的 inset,防止其被导航栏等遮挡。
- 这里的 scrollview 包括 UIScrollView,以及继承自 UIScrollView 的 UITableView、UICollectionView、UITextView 等。
- 要注意的是,如果有多个 scrollview,控制器只会自动调整其下第一个 scrollview 的 inset 属性。
import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { var tableView:UITableView? override func viewDidLoad() { super.viewDidLoad() //创建表视图 self.tableView = UITableView(frame: self.view.frame, style:.plain) self.tableView!.delegate = self self.tableView!.dataSource = self //创建一个重用的单元格 self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell") self.view.addSubview(self.tableView!) } //******

2,automaticallyAdjustsScrollViewInsets为true造成的问题
虽然自动调整 inset 很方便,但有时也会造成一些问题。(1)比如我们添加一个 textview,由于自动调整,textview 上面会空出一大块区域。

(2)或者我们布局的时候就已经把导航栏考虑在内,即起始位置从 (0,64) 开始。但由于内边距的自动调成,会造成内容偏移。

3,解决办法
将 scrollview 自动调整 inset 功能关闭即可,有两种方法修改。
(1)在代码中设置
(2)在 storyboard 中设置
(1)在代码中设置
self.automaticallyAdjustsScrollViewInsets = false
(2)在 storyboard 中设置

航哥,有个问题,automaticallyAdjustsScrollViewInsets改为false了,然后进入该界面也是正常的,但是下拉的时候,会莫名多出64的空白出来,无法回弹那种。请问我是什么地方有问题?我把导航栏改成全透明的了。