首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >iOS11中奇怪的uitableview行为。使用导航推送动画向上滚动单元格

iOS11中奇怪的uitableview行为。使用导航推送动画向上滚动单元格
EN

Stack Overflow用户
提问于 2017-08-09 00:44:45
回答 7查看 42.8K关注 0票数 119

我最近迁移了一些代码到新的iOS 11 beta 5SDK。

我现在从UITableView得到了一个非常令人困惑的行为。tableview本身并没有那么花哨。我有自定义的单元格,但在大多数情况下,它只是为了它们的高度。

当我用tableview推我的视图控制器时,我得到了一个额外的动画,单元格“向上滚动”(或者可能整个表视图框被改变),以及沿着推/弹出导航动画向下滚动。请参阅gif:

我在loadView方法中手动创建了tableview,并将自动布局约束设置为等于tableview的superview的前导、尾部、顶部和底部。superview是视图控制器的根视图。

视图控制器推送代码是非常标准的:self.navigationController?.pushViewController(notifVC, animated: true)

相同的代码在iOS 10上提供了正常的行为。

你能告诉我哪里出了问题吗?

编辑:我做了一个非常简单的tableview控制器,我可以在那里重现相同的行为。代码:

代码语言:javascript
复制
class VerySimpleTableViewController : UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
    }


    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 4
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

        cell.textLabel?.text = String(indexPath.row)
        cell.accessoryType = .disclosureIndicator

        return cell
    }


    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)

        let vc = VerySimpleTableViewController.init(style: .grouped)

        self.navigationController?.pushViewController(vc, animated: true)
    }
}

编辑2:我能够将问题缩小到我对UINavigationBar的定制。我有一个这样的定制:

rootNavController.navigationBar.setBackgroundImage(createFilledImage(withColor: .white, size: 1), for: .default)

其中createFilledImage创建具有给定大小和颜色的正方形图像。

如果我注释掉这一行,我会得到正常的行为。

如果你对这件事有任何想法,我将不胜感激。

EN

回答 7

Stack Overflow用户

发布于 2017-10-09 23:48:40

您可以在整个应用程序中一次编辑此行为,例如在didFinishLaunchingWithOptions中使用NSProxy:

代码语言:javascript
复制
if (@available(iOS 11.0, *)) {
      [UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} 
票数 6
EN

Stack Overflow用户

发布于 2017-12-11 23:35:05

我可以重现iOS 11.1的错误,但是这个错误似乎从iOS 11.2开始就被修复了。请参阅http://openradar.appspot.com/34465226

票数 3
EN

Stack Overflow用户

发布于 2017-10-02 02:37:41

请确保与上述代码一起,添加如下所示的附加代码。它解决了这个问题

代码语言:javascript
复制
override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 
     tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) // print(thisUISBTV.adjustedContentInset) 
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45573829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档