【发布时间】:2020-09-07 17:59:49
【问题描述】:
我正在尝试在页面中间创建一个如下所示的布局元素并利用UIPageViewController 来完成它。
我在容器视图中嵌入了UIPageViewController。卡片元素的内容有一个由 AutoLayout 确定的高度,并且向边缘水平拉伸,卡片有一个最大宽度,之后它保持居中。但是我遇到了一个奇怪的问题。当我将卡片元素的 VC 设置为我的 UIPageViewController 的内容时,单个页面的大小大部分都正确,但它的原点超出了 pageVC 的内容视图的范围。
我在一个非常小的测试项目中重现了这个问题。这是情节提要和相关限制:
这是我的代码:
class ViewController: UIViewController {
var pageController: UIPageViewController!
override func viewDidLoad() {
super.viewDidLoad()
guard let vc = storyboard?.instantiateViewController(withIdentifier: "PageView") else { return }
pageController.setViewControllers([vc], direction: .forward, animated: true, completion: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let dest = segue.destination as? UIPageViewController {
pageController = dest
}
}
}
class SinglePageViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.translatesAutoresizingMaskIntoConstraints = false
}
}
这是我实际得到的:
我尝试在SinglePageViewController 中设置view.autoresizingMask = [.flexibleWidth, .flexibleLeftMargin, .flexibleRightMargin] 而不是view.translatesAutoresizingMaskIntoConstraints = false,这样可以提供正确的前导、尾随和宽度约束,但是我无法让UIView-Encapsulated-Layout-Height: self.height = 0 约束消失。没有系统约束可以解释原点错位,所以我不知道如何进一步调试。层次结构中较高的所有视图的高度都为 0,并且所有较低的视图都正确放置。如果我将SinglePageViewController 直接嵌入到容器视图中,它的布局非常完美,但如果我将UIPageViewController 放在两者之间,它就会中断。
为什么UIPageViewController 不限制其中的页面以匹配其视图的边界?有什么办法可以让它工作吗?
【问题讨论】:
标签: ios uipageviewcontroller ios-autolayout uicontainerview