首页 > 解决方案 > viewDidLayoutSubviews() 问题

问题描述

我有以下屏幕,为了使 uilabel 和键盘之间的框居中,我创建了一个简单的计算,其中我添加了标题高度,然后是 uilabel 高度,然后是键盘高度减去整个屏幕大小,然后将所有内容除以 2获得中心点[我添加了下面的代码,尽管它不相关]

问题是为了获得 UILabels 高度,我必须在 viewDidLayoutSubviews() 中设置约束。现在的想法是,每次填充一个框时,下一个框都会成为第一响应者,但这不起作用,因为每次框成为第一响应者时都会调用 viewDidLayoutSubviews() 。

我该怎么办?有没有办法在不调用 viewDidLayoutSubviews() 的情况下获取 uiLabel 的高度。

这是使框居中的代码:

    override func viewDidLayoutSubviews() {
    let allItems = headerC.frame.height + stackViewOfDefin.frame.height + 270 + 20
    let getSpace = UIScreen.main.bounds.height - allItems
    let stackview = UIStackView(arrangedSubviews: gameBoxes)
    stackview.axis = .horizontal
    stackview.spacing = 5
    stackview.distribution = .fillEqually
    stackview.translatesAutoresizingMaskIntoConstraints = false
    self.view.addSubview(stackview)
    NSLayoutConstraint.activate([
        stackview.topAnchor.constraint(equalTo: secondLine.bottomAnchor, constant: getSpace/2-30),
        stackview.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
        stackview.leadingAnchor.constraint(greaterThanOrEqualTo: view.leadingAnchor, constant: 10),
        stackview.trailingAnchor.constraint(lessThanOrEqualTo: view.trailingAnchor, constant: -10)
        ])
}

在此处输入图像描述

标签: swiftxcode

解决方案


推荐阅读