swift - 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)
])
}
解决方案
推荐阅读
- php - 使用ajax jQuery for-each函数在表中追加多个数据
- flutter - 如何在 catch 代码中访问 dio onResponse.statuscode
- java - 使用 factory.createParser 创建解析器时出错
- flutter - 如何在 Flutter Flame 中创建滚动视图
- text - 在 SwiftUI 中使用 Text 时,如何解决“调用初始化程序时没有完全匹配”错误?
- laravel - 在太长的时间内在 laravel 刀片中显示大数组
- sql - 从单个列中的以下数据中选择最小 START_DATE 和最大 END_DATE
- gradle - 如何使用 Kotlin dsl 在自定义 Gradle 插件任务中动态添加依赖项(和存储库)
- go - 有没有一种简单的方法可以更改现有时间的小时?
- java - Tess4j 将页面与 pdf 分开,在 Java 应用程序中有多个页面