IOS 11大标题导航栏捕捉,而不是平滑过渡

k7fdbhmy  于 2022-10-23  发布在  iOS
关注(0)|答案(5)|浏览(272)

我面临着一个问题,当滚动到嵌入在UIView控制器中的UITableView上时,大标题导航栏突然折叠。似乎只有在屏幕上向上滚动时才会出现此问题。当在屏幕上向下滚动时,标题会平稳地过渡到再次变大,但反之亦然。
如果使用UITableView控制器,则不会出现此问题。
以下是在UITableView控制器内滚动时的正常预期行为。

下面是在UIView控制器中使用UITableView时出现的突然转换。

以下是中断实现的代码:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

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

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

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

        cell.textLabel?.text = "Title \(indexPath.row)"

        return cell
    }

}

导航栏选中了首选大标题,并且导航项目的大标题设置为自动。
上面两个示例的代码和配置完全相同,只是UIView控制器中的UITableView控制器与UITableView不同。
我还观察到,如果UITableView的内容不超过视图的高度,则不会发生中断行为。但是,一旦屏幕上的单元格数量超过了可以容纳的数量,它就会破裂。
你知道我是不是做错了什么,或者这是不是iOS 11的错误?

sbtkgmzw

sbtkgmzw1#

我遇到了同样的问题-我将UIViewController嵌入到UINavigationController中,UIViewController具有表视图,表视图具有对安全区域的前导、拖尾、顶部和底部约束。整个桌面呈现出跳跃/急促的样子。诀窍是将Tableview的顶部约束更改为Superview

8qgya5xd

8qgya5xd2#

将这行代码放在包含UITableView的UIView控制器上,这样对我来说就行了。
斯威夫特

extendedLayoutIncludesOpaqueBars = true;

目标-C

self.extendedLayoutIncludesOpaqueBars = YES;

将UITableView自动布局顶部空间设置为“Superview”,而不是“Safe Area”

pepwfjgg

pepwfjgg3#

我有一个类似的外观问题,并通过从我的AppDelegate中删除UINavigationBar.appearance().isTranslucent = false来解决它。
更新:如果你不想要半透明效果,你应该启用extendedLayoutIncludesOpaqueBars。这样一来,所有的故障都被修复了。

dxpyg8gm

dxpyg8gm4#

在界面生成器中:

1.选择您的“viewController”。
1.属性检查器勾选“在不透明条下”和“在顶条下”。
1.将ScrollView第二项的最高限制设置为“SuperView”,而不是“SafeArea”。
这对我很管用。
Reference

ws51t4hk

ws51t4hk5#

苏奥勒的回答是正确的,但我不知道如何在故事板上修正它。最后,我在另一个问题中用罗曼的解决方案解决了问题,添加了以下内容:

NSLayoutConstraint.activate([
    scrollView.topAnchor.constraint(equalTo: view.topAnchor),
    scrollView.leftAnchor.constraint(equalTo: view.leftAnchor),
    scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
    scrollView.rightAnchor.constraint(equalTo: view.rightAnchor)
])

viewDidLoad中。
原始答案:https://stackoverflow.com/a/48321447/1386369

相关问题