And*_*rew 5 objective-c uikit swift swiftui
我正在尝试在不使用 SwiftUI 的情况下尝试在代码中重新创建第一个SwiftUI 教程。在示例中,它提到使用Spacer“指示布局以使用设备的全宽”:
VStack {
Text("Turtle Rock")
HStack {
Text("Joshua Tree National Park")
Spacer()
Text("California")
}
}
Run Code Online (Sandbox Code Playgroud)
对于VStack,HStack和Text意见,我可以轻松地使用UIStackView和UILabel。但是对于Spacer,我似乎无法在标准库中找到任何等价物(没有UISpacer或类似的东西),这让我认为这是 SwiftUI 的自定义内容。在教程中,它描述了这Spacer是如何工作的:
间隔器扩展以使其包含视图使用其父视图的所有空间,而不是仅由其内容定义其大小。
那么如何以Spacer编程方式重新创建此视图的功能呢?我是否只是向 UIStackView 添加约束以使其全宽?或者有没有办法将子视图添加到 UIStackView 使其表现得像在 SwiftUI 中一样?
Pal*_*nak 15
我已经使用虚拟解决方案UIView(),它使用低优先级设置了大常量widthConstraint- 这确保 UIView 将尽可能增长,但不会超过superview约束,因为它具有较低的优先级。
例子:
let titleLabel = UILabel()
titleLabel.text = "Joshua Tree National Park"
let spacer = UIView()
// maximum width constraint
let spacerWidthConstraint = spacer.widthAnchor.constraint(equalToConstant: .greatestFiniteMagnitude) // or some very high constant
spacerWidthConstraint.priority = .defaultLow // ensures it will not "overgrow"
spacerWidthConstraint.isActive = true
let descriptionLabel = UILabel()
descriptionLabel.text = "California"
UIStackView(arrangedSubviews: [titleLabel, spacer, descriptionLabel])
Run Code Online (Sandbox Code Playgroud)
只要将分布设置为填充,plainUIView()就可以替换 a ,因为它没有设置宽度约束。SwiftUI.Spacer我只垂直测试过这个。UIStackView但是,您应该注意和执行的布局SwiftUI.HStack实际上并不是相同的步骤,尽管最终结果可能看起来相似;需要调查的东西。
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |