【问题标题】:Unable to center UIView inside UIPageViewController无法在 UIPageViewController 中居中 UIView
【发布时间】:2021-03-27 14:30:00
【问题描述】:

在 UIPageViewController 中水平居中视图时遇到问题。

我的 ViewController 包含一个具有以下约束的 UIView:

  • 身高400
  • 20 对齐到安全区域
  • 20 将尾随与 SafeArea 对齐
  • 导航栏 10 的顶部空间

在这个视图中,我有一个容器视图,上下左右对齐 10。 ContainerView 链接到 UIPageViewController,如上图所示。 在界面生成器中,我可以看到所有元素都正确居中。 但是,如果我运行该应用程序,我会得到:

这几天我一直在纠结这个问题,但没有任何运气。

我删除了每个视图并再次添加它们,删除了 UIPageViewController 并再次创建它,没有运气。

奇怪的是,到目前为止,我从未遇到过 UIPageViewControllers 的任何问题。事实上,我在应用程序中有另一个这样的部分(不同的内容),一切都很好。

对我可能遗漏的内容有什么建议吗?

【问题讨论】:

  • 只是检查 - 您为页面间距和书脊位置设置了哪些设置?您是否在其中放置了一些东西来改变 pageViewController 中各个视图的位置?
  • @creeperspeak 页面间距为 0,书脊位置为无。
  • 您可能需要显示更多代码或提供更多详细信息以便我们提供帮助。您是在代码中还是在 Interface Builder 中进行布局约束?如果您正在执行编程约束,您可以显示该代码,以及您在何处/何时调用它? FWIW,您可能只需使用 Debug View Hierarchy 工具(在底部调试区域菜单中)即可获得答案。
  • @creeperspeak 我正在界面生成器中进行布局。我尝试以编程方式执行它们并以编程方式更改它们,但没有运气。

标签: ios swift xcode uiview uipageviewcontroller


【解决方案1】:

我设法解决了这个问题,但只是在遇到一些 UITextFields 和其他 UIViews 的类似问题之后。

myContainerView.frame.size.width 返回 self.view.frame.size.width 的宽度而不是应该返回的宽度。

在这种情况下,ContainerView 的领先位置(20,相对于安全区域)+ self.view.frame.size.width 使视图看起来不居中。

所以我不得不在这里做一些数学来修复它,虽然它看起来更像是一个 hack 而不是真正的修复。

let mainViewWidth: CGFloat! = self.view.frame.size.width
let externalConstraints: CGFloat = 10*4
let imageViewWidth: CGFloat! = mainViewWidth - externalConstraints
let titleLabelWidth: CGFloat! = mainViewWidth - externalConstraints
let textLabelWidth: CGFloat! = mainViewWidth - (externalConstraints + 20*2)
    
clIVPaceContentLeading.constant = 0.0
clIVPaceContentWidth.constant = imageViewWidth
    
clLBLPageContentTitleLeading.constant = 0.0
clLBLPageContentTitleWidth.constant = titleLabelWidth
    
clLBLPageContentTextLeading.constant = 20.0
clLBLPageContentTextWidth.constant = textLabelWidth

有人知道为什么会这样吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多