滚动时收缩大标题(不是UITableViewController)iOS 11

Jon*_*ano 13 xcode ios swift ios11 xcode9

我有一个嵌入在导航控制器中的视图控制器,希望将大标题选项设置为true; 在View Controller里面有一个Scroll View.

我想在滚动时缩小导航栏.

我怎么能存档这个?

XCode 9,Swift 4,iOS 11

Saú*_*ril 54

我没有实现它使用UIScrollView,但我存档它与其他ViewControllers一起使用UITableView作为第一个视图.

如果tableView不是第一个视图,则大标题无法自动隐藏.您很可能需要确保tableView是主视图的子视图数组中的第一个元素.

在此输入图像描述

我希望这能解决你的问题.

  • omg ...有史以来最愚蠢的逻辑..非常感谢你解释得这么好. (7认同)
  • 如果您以编程方式构建视图,则必须首先将表/滚动视图添加为子视图。如果您使用“bringSubviewToFront”,您也会丢失大标题过渡。 (2认同)

Kam*_*ski 6

你尝试过这样的事吗?当内容向上滚动时,它会转换大标题显示模式.

class P1ViewController: UIViewController, UIScrollViewDelegate
{
    var canTransitionToLarge = false
    var canTransitionToSmall = true    

    func scrollViewDidScroll(_ scrollView: UIScrollView)
    {
        if canTransitionToLarge && scrollView.contentOffset.y <= 0 {
            UIView.animate(withDuration: 0.5) {
                self.navigationItem.largeTitleDisplayMode = .always
            }
            canTransitionToLarge = false
            canTransitionToSmall = true
        }
        else if canTransitionToSmall && scrollView.contentOffset.y > 0 {
            UIView.animate(withDuration: 0.5) {
                self.navigationItem.largeTitleDisplayMode = .never
            }
            canTransitionToLarge = true
            canTransitionToSmall = false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

在代码中设置 prefersLargeTitles 确实对我有用,可以使 NavBar 标题随着滚动而缩小和增长。我确实注意到如果您通过 InterfaceBuilder 设置属性,则收缩功能不起作用。

IB财产检查员

而是在代码中设置

    self.navigationController?.navigationBar.prefersLargeTitles = true
Run Code Online (Sandbox Code Playgroud)


小智 5

这种方式对我有用。我按照以下步骤操作: 1- 将 TableView 移动到视图控制器场景中的列表顶部(在安全区域下)。2- 制作 FirstView 并由 FirstViewContoller 加载。

解决方案截图