如何以编程方式在UIPageViewController中放置自动布局约束?



我试图在UIPageViewController中显示内容,但到目前为止我没有运气。我能够显示页面视图点,并且背景颜色(蓝绿色(正确应用,但仅此而已。

在我的代码中,我有一个从UIPageViewController继承的PageViewController,以及从UIViewController继承的InPageViewController作为父视图中的内容页面。

在页面视图控制器内部:

private let labelView: UILabel = {
let label = UILabel()
//        label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Label"
return label
}()
init(data: PageData) {
super.init(nibName: nil, bundle: nil)
labelView.text = data.dataName
view.backgroundColor = .systemTeal
view.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(labelView)
//        These are the constraints I am trying to set. Tried lots of different variations already 
//        NSLayoutConstraint.activate([
//            labelView.centerXAnchor.constraint(equalTo: view.layoutMarginsGuide.centerXAnchor),
//            labelView.centerYAnchor.constraint(equalTo: view.layoutMarginsGuide.centerYAnchor),
//        ])
}

这是我显示背景颜色的当前状态,但不是标签。每当我添加约束数组时,背景都会消失,并恢复为我在PageViewController中设置的默认灰色。

let dataArray = [PageData(dataName: "Data"), PageData(dataName: "Lore")]
override func viewDidLoad() {
super.viewDidLoad()
setupView()
}
func setupView() {
title = "A fistful of Datas"
}
lazy var arrayInPageViewController: [InPageViewController] = {
var inPageVC = [InPageViewController]()
for data in dataArray {
inPageVC.append(InPageViewController(data: data))
}
return inPageVC
}()
override init(transitionStyle style: UIPageViewController.TransitionStyle, navigationOrientation: UIPageViewController.NavigationOrientation, options: [UIPageViewController.OptionsKey : Any]? = nil) {
super.init(transitionStyle: .scroll, navigationOrientation: navigationOrientation, options: nil)
self.dataSource = self
self.delegate = self
self.view.backgroundColor = .systemGray
setViewControllers([arrayInPageViewController[0]], direction: .forward, animated: true, completion: nil)
print(dataArray)
}

在这里,我设置父视图。我还有一个扩展,我在其中运行存根。

我对编程比较陌生,而且我仍然无法理解 Swift 中的自动布局逻辑,因此非常感谢任何帮助。

您需要将labelView.translatesAutoresizingMaskIntoConstraints设置为false而不是view.translatesAutoresizingMaskIntoConstraints

最新更新