我最近迁移了一些代码到新的iOS11beta5SDK.

我现在从UITableView得到一个非常令人困惑的行为.桌面视图本身并没有那么花哨.我有定制的单元格,但大部分只是为了它们的高度.

当我用TableView按下我的视图控制器时,我得到了一个附加动画,其中单元格"向上滚动"(或者可能整个表视图框都改变了),以及沿着推送/弹出导航动画向下滚动.请参阅gif:

wavy tableview

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

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

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

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

编辑:我已经制作了一个非常简单的表视图控制器,我可以在那里重现相同的行为.代码:

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创建具有给定大小和 colored颜色 的方形图像.

如果我注释掉这行,我就会恢复正常行为.

如果您对这件事有任何 idea ,我将不胜感激.

推荐答案

这是由于UIScrollView's (UITableView is a subclass of UIScrollview)新的101属性,默认情况下设置为102.

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

    tableView.contentInsetAdjustmentBehavior = .never

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

Ios相关问答推荐

RN 0.63支持iOS ProMotion?

PieChartView未以编程方式显示在屏幕上

如何在iPhone 15上消除.NET Maui中状态栏和页面之间的差距

如何将模糊输入/模糊输出添加到SwiftUI中的非对称过渡?

自定义UIControl不适用于UITapGestureRecognizer

swiftui 图像放大时无法正确拖动

Apple Metal iOS 为什么 GLKMatrix4MakeLookAt 来回摇摆

不可发送类型 '[String : Any]?'在调用非隔离实例方法 XXX 时退出主参与者隔离上下文不能跨越参与者边界

如何将 -fobjc-arc-exceptions 标志正确添加到 XCode 中?

iOS应用程序崩溃,必需条件为false:isformatsamplerateandchannelcountvalid(format)

将角半径仅应用于 Swiftui 中按钮的两个角

来自 c++ 的runtime_error未在 iOS 中捕获

Swift 图表:.chartYScale 似乎只适用于 100 的增量?

无论我将构建版本或应用程序版本更改为什么,都会出现 ITEMS-4238冗余二进制上传错误

Xcode 11 向后兼容性:UIWindowScene 仅在 iOS 13 或更高版本中可用

由于 NSInvalidUnarchiveOperationException 导致 iOS11 WKWebview 崩溃

iOS:以编程方式制作屏幕截图的最快、最高效的方法是什么?

以编程方式创建按钮并设置背景图像

如何用 CAShapeLayer 和 UIBezierPath 画一个光滑的圆?

UICollectionView:必须用非零布局参数初始化