使用 prefersLargeTitles 和 UITableView 平滑滚动

Smooth scrolling with prefersLargeTitles and UITableView

我在使用 prefersLargeTitles 并添加 UITableView 时遇到滚动问题。

如果我在导航控制器中设置 prefersLargeTitles 并且它的根是 UITableViewController 一切都很好,导航大标题的滚动方式与我们在系统应用程序中看到的方式相同 (在iOS 11+).

问题

但是,如果我使用 UIViewController 并在其中添加 UITableView,滚动似乎会有所不同。导航栏移动 more/faster 比我实际滚动。它只是 hides/shows 每当我滚动到一个触发它的位置时的大标题,所以我最终会有完全不同的感觉。

原来是布局导致了这个问题。

如果 UITableView 使用 将顶部对齐到:安全区域 约束 (除了底部,前导和尾随 Safe Area) 并没有扩展下吧。

但是,如果我使用扩展布局,将顶部与 superview 对齐,我仍然可以使用 UITableView 并获得大标题及其导航栏的正确行为。

edgesForExtendedLayout = .top
extendedLayoutIncludesOpaqueBars = true

或者使用导航栏的 isTranslucent = true 来扩展它。