返回 导航

Swift

hangge.com

Swift - 当存在导航栏时,scrollview自动下移的问题解决

作者:hangge | 2017-01-20 08:10

1,automaticallyAdjustsScrollViewInsets属性介绍 

  • automaticallyAdjustsScrollViewInsets iOS7 后新增的属性,其默认值是 true
  • 当其为 true 时。控制器会根据所在界面的 statusbarnavigationbartabbar 的高度,自动调整 scrollview inset,防止其被导航栏等遮挡。
  • 这里的 scrollview 包括 UIScrollView,以及继承自 UIScrollView UITableViewUICollectionViewUITextView 等。
  • 要注意的是,如果有多个 scrollview,控制器只会自动调整其下第一个 scrollview inset 属性。
比如我们在视图中添加一个 tableview,虽然我们将 tableview frame 设置成控制器 view frame。但表格也不会被导航栏给遮挡。
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)在代码中设置
self.automaticallyAdjustsScrollViewInsets = false

(2)在 storyboard 中设置 
评论

全部评论(1)

回到顶部