Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift iOS 11大标题导航栏捕捉,而不是平滑过渡_Swift_Xcode_Uitableview_Uiviewcontroller_Ios11 - Fatal编程技术网

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

Swift iOS 11大标题导航栏捕捉,而不是平滑过渡,swift,xcode,uitableview,uiviewcontroller,ios11,Swift,Xcode,Uitableview,Uiviewcontroller,Ios11,我面临一个问题,当在嵌入UIViewController内部的UITableView上滚动时,大标题导航栏会突然崩溃。问题似乎只有在屏幕上向上滚动时才会出现。当在屏幕上向下滚动时,标题会平滑地再次变大,但反之亦然 如果使用UITableViewController,则不会发生此问题 以下是在UITableViewController中滚动时的正常预期行为 这是在UIViewController内部使用UITableView时出现的中断、突然的转换 以下是中断实现的代码: class View

我面临一个问题,当在嵌入UIViewController内部的UITableView上滚动时,大标题导航栏会突然崩溃。问题似乎只有在屏幕上向上滚动时才会出现。当在屏幕上向下滚动时,标题会平滑地再次变大,但反之亦然

如果使用UITableViewController,则不会发生此问题

以下是在UITableViewController中滚动时的正常预期行为

这是在UIViewController内部使用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
    }

}
导航栏已选中“首选大标题”,并且导航项已将“大标题”设置为“自动”

上述两个示例的代码和配置完全相同,只是其中一个是UITableViewController,另一个是UIViewController内部的UITableView

我还观察到,如果UITableView的内容不超过视图的高度,则不会发生中断行为。但一旦屏幕上的单元格数量超过屏幕所能容纳的数量,它就会崩溃


你知道我是做错了什么,还是这是iOS 11的错误吗?

我面临着同样的问题-我在
UINavigationController
中嵌入了
UIViewController
,而
UIViewController
具有指向安全区域的前导、尾随、顶部和底部约束的tableview。整个tableview表现得神经质/活泼。诀窍是将tableview的顶部约束更改为superview

这里我记录了更改约束的过程

我有一个类似的外观问题,通过删除
UINavigationBar.appearance().isTranslucent=false解决了这个问题
来自我的AppDelegate


更新:如果你不想要半透明,你应该启用。这样,所有的故障都会得到修复。

将这行代码放在包含UITableView的UIViewController上 对我来说很好

迅捷的

目标-C

self.extendedLayoutIncludesOpaqueBars = YES;

将界面生成器中的UITableView自动布局顶部空间设置为“Superview”,而不是“安全区域”:

  • 选择“视图控制器”
  • 属性检查器勾选“不透明条下”和“顶部条下”
  • 将scrollView的顶部约束设为“SuperView”而不是“SafeArea”的第二项
  • 它对我起作用了


    苏拉的答案是正确的,但我不知道如何在情节提要中修复它。最后,我用Roman在另一个问题中的解决方案解决了这个问题,添加了:

    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


    原始答案:

    如何配置导航栏?故事板,以编程方式?您能显示选项或代码吗?我认为UITableViewController有正确处理此行为的实现。@barbarity我用更多信息编辑了我的OP。@还有关于此的文档吗?哦,不,您完全正确。当内容大于屏幕时,它会突然崩溃。我会调查你的!我测试了这个,它是有效的。更改了UITableView的顶部约束,以引用UIViewController的Superview,而不是安全区域,现在它是平滑的!但我觉得这仍然是苹果的一个缺陷?或者需要关于它的文档。太棒了。正在将collectionView固定到安全的顶部锚定,并更改为view.topAnchor修复了该问题。谢谢我在XIB中使用viewController中的集合视图,并将约束设置为superview,但仍然面临相同的问题。它表现得神经质/活泼。这有什么解决方案吗?我正在尝试为UITableViewController中的表视图修复此问题,但我无法在情节提要中更改表视图的约束。我是否必须使用UIViewController并添加自己的表视图?表视图包含动态单元格。我尝试在viewWillAppear()中使用NSLayoutConstraint.activate([tableView.topAnchor.constraint(equalTo:view.superview!.topAnchor)]以编程方式更改它,但没有效果。非常感谢您的回答。帮我省去了一个大麻烦。我可以确认这解决了这个问题。这太糟糕了。我想要一个非半透明的导航栏。取消选中“半透明”后会出现反弹效果。这很有效,谢谢!无论您是在UIViewController中使用UITableView还是将UITableViewController用作子视图控制器,这似乎都可以解决问题。当导航控制器包含在选项卡控制器中时,这会导致我的安全区域出现问题。这样,我的表视图就不会考虑由选项卡栏创建的底部安全区域。@Connor除了ExtendedLayoutCludeSopaqueBars之外,您还可以指定哪些边是用edgesForExtendedLayout扩展的;=>ExtendedLayoutCludeSopaqueBars=真边ForExtendedLayout=[.top]
    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)
    ])