Sam*_*ley 4 ios nslayoutconstraint swift ios11
示例项目可以在https://github.com/SRowley90/LargeTitleIssueTestiOS找到
我正在尝试将分段控件放置在 iOS 应用程序中的大标题下方。我有一个 UIToolbar,其中包含分段控件。
向上滚动时title和 的toolbar行为符合预期。
向下滚动时,导航栏是正确的,但它不会向下推动 UITabBar 或 UITableView,这意味着标题位于分段控件上方,如下图所示。
我很确定这与我设置的限制有关,但我不知道是什么。
我设置了位置 UITabBarDelegate 方法:
func position(for bar: UIBarPositioning) -> UIBarPosition {
return .topAttached
}
Run Code Online (Sandbox Code Playgroud)
采取某处的代表团tableView:
tableView.delegate = self
覆盖scrollViewDidScroll并更新toolbar位置外观(因为真实位置不应该根据良好的反弹效果而改变。
extension ViewController: UIScrollViewDelegate {
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
var verticalOffset = scrollView.contentOffset.y + defaultNavigationBarHeight
if scrollView.refreshControl?.isRefreshing ?? false {
verticalOffset += 60 // After is refreshing changes its value the toolbar goes 60 points down
print(toolbar.frame.origin.y)
}
if verticalOffset >= 0 {
toolbar.transform = .identity
} else {
toolbar.transform = CGAffineTransform(translationX: 0, y: -verticalOffset)
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在应用转换之前使用以下检查,使其更可靠、更自然地适应默认的 iOS 样式:
if #available(iOS 11.0, *) {
guard let navigationController = navigationController else { return }
guard navigationController.navigationBar.prefersLargeTitles else { return }
guard navigationController.navigationItem.largeTitleDisplayMode != .never else { return }
}
Run Code Online (Sandbox Code Playgroud)