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

Posted

技术标签:

【中文标题】如何以编程方式在 UIPageViewController 中放置自动布局约束?【英文标题】:How to place auto layout constraints inside UIPageViewController programmatically? 【发布时间】:2019-10-16 09:54:52 【问题描述】:

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

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

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 中的自动布局逻辑,因此非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢。看起来我应该在发帖之前对其进行更多修改。 :) 别担心,translatesAutoresizingMaskIntoConstraints 是一个容易被忽视的东西 :)

以上是关于如何以编程方式在 UIPageViewController 中放置自动布局约束?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式使应用程序图标位置固定在跳板中

如何以编程方式在 UIview 中制作圆角和边?

在android中以编程方式创建视图时如何传递AttributeSet

如何在 Swift 中以编程方式将 UILabel 对象居中?

如何在 GNU Make 中以编程方式定义目标?

如何在 Quarkus 中以编程方式注册 bean?