iOS11中奇怪的uitableview行为。单元格随导航按钮动画向上滚动

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

我现在从UITableView中得到了一个非常混乱的行为。桌面视图本身并没有那么花哨。我有自定义单元格,但在大多数情况下,这只是因为它们的高度

当我使用tableview按下视图控制器时,我会得到一个附加的动画,其中单元格会“向上滚动”(或者可能会更改整个tableview帧),并沿着推/弹出导航动画向下滚动。请参阅gif:

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

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

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

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

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

类VerySimpleTableViewController:UITableViewController{
重写func viewDidLoad(){
super.viewDidLoad()
self.tableView.register(UITableViewCell.self,强制重用标识符:“单元格”)
}
重写func numberOfSections(在tableView:UITableView中)->Int{
返回1
}
重写func tableView(tableView:UITableView,numberOfRowsInSection:Int)->gt;Int{
返回4
}
重写func tableView(utableview:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
let cell=tableView.dequeueReusableCell(带有标识符:“cell”,用于:indexath)
cell.textlab?.text=String(indexPath.row)
cell.accessoryType=.disclosureIndicator
返回单元
}
重写func tableView(tableView:UITableView,didSelectRowAt indexPath:indexPath){
取消选择行(at:indexPath,动画:true)
设vc=VerySimpleTableViewController.init(样式:。分组)
self.navigationController?.pushViewController(vc,动画:true)
}
}

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

rootNavController.navigationBar.setBackgroundImage(CreateFilleImage(带颜色:。白色,大小:1),for:。默认值)

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

如果我把这句话注释掉,我会恢复正常的行为

如果您能对此事有任何想法,我将不胜感激

这是由于UIScrollView的(UITableView是UIScrollView的一个子类)新的ContentInsertAdjustmentBehavior属性,默认情况下该属性设置为.automatic

您可以在任何受影响控制器的viewDidLoad中使用以下代码段覆盖此行为:

tableView.contentInsettaJustmentBehavior=.never

https://developer.apple.com/documentation/uikit/uiscrollview/2902261-contentinsetadjustmentbehavior

发表评论