是否有 Swift 缩进导航栏大标题与 cellLayoutMarginsFollowReadableWidth 一致的方法?
Is there a Swift method for indenting the large title of a navigation bar in line with cellLayoutMarginsFollowReadableWidth?
目前,在 iPad,我的 UINavigationBar 大标题看起来很奇怪,因为它没有缩进到我的 UITableView 单元格所在的位置。这是因为我的 table 视图和单元格遵循可读宽度。有没有缩进这个标题的方法,或者是唯一一条将单元格与标题对齐的建议(使它们不遵循可读宽度)。我真的很感激任何花时间回复的人。
当您第一次加载视图控制器时,您应该检索当前 readableContentGuide
的 minX
坐标并将该值设置为左侧的 layoutMargin
值。因此:
let leftMargin = self.view.readableContentGuide.layoutFrame.minX
self.navigationController?.navigationBar.layoutMargins.left = leftMargin
然后,您还需要确保您的布局动态调整,以便在用户旋转屏幕时(或在 iPad 上使用变量 window 大小)标题将保持对齐:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
coordinator.animate(alongsideTransition: { _ in
let leftMargin = view.readableContentGuide.layoutFrame.minX
navigationController?.navigationBar.layoutMargins.left = leftMargin
}, completion: nil)
}
@swillsea 的回答对我来说效果不佳:旋转设备时,大标题的左边距在旋转动画期间似乎有错误的初始位置。人们可以在启用了慢速动画选项的模拟器中看到这一点。
这是因为屏幕是使用旧的左边距在新维度中布局的。在旋转动画期间,边距被动画化为正确的最终大小。
我没有在尺寸改变时更新左边距,而是作为正常布局链的一部分进行更新:
override func viewWillLayoutSubviews() {
let leftMargin = self.view.readableContentGuide.layoutFrame.minX
self.navigationController?.navigationBar.layoutMargins.left = leftMargin
}
对我来说现在的效果是,在旋转动画的所有阶段,标题的左边距现在等于我可读内容的左边距。
目前,在 iPad,我的 UINavigationBar 大标题看起来很奇怪,因为它没有缩进到我的 UITableView 单元格所在的位置。这是因为我的 table 视图和单元格遵循可读宽度。有没有缩进这个标题的方法,或者是唯一一条将单元格与标题对齐的建议(使它们不遵循可读宽度)。我真的很感激任何花时间回复的人。
当您第一次加载视图控制器时,您应该检索当前 readableContentGuide
的 minX
坐标并将该值设置为左侧的 layoutMargin
值。因此:
let leftMargin = self.view.readableContentGuide.layoutFrame.minX
self.navigationController?.navigationBar.layoutMargins.left = leftMargin
然后,您还需要确保您的布局动态调整,以便在用户旋转屏幕时(或在 iPad 上使用变量 window 大小)标题将保持对齐:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
coordinator.animate(alongsideTransition: { _ in
let leftMargin = view.readableContentGuide.layoutFrame.minX
navigationController?.navigationBar.layoutMargins.left = leftMargin
}, completion: nil)
}
@swillsea 的回答对我来说效果不佳:旋转设备时,大标题的左边距在旋转动画期间似乎有错误的初始位置。人们可以在启用了慢速动画选项的模拟器中看到这一点。
这是因为屏幕是使用旧的左边距在新维度中布局的。在旋转动画期间,边距被动画化为正确的最终大小。
我没有在尺寸改变时更新左边距,而是作为正常布局链的一部分进行更新:
override func viewWillLayoutSubviews() {
let leftMargin = self.view.readableContentGuide.layoutFrame.minX
self.navigationController?.navigationBar.layoutMargins.left = leftMargin
}
对我来说现在的效果是,在旋转动画的所有阶段,标题的左边距现在等于我可读内容的左边距。