【发布时间】:2020-07-08 17:34:53
【问题描述】:
问题:
我正在努力使用 SwiftUI 有效地布局视图。 我对 UIKit 和 Autolayout 非常熟悉,并且总是觉得它很直观。
我知道 SwiftUI 还很年轻,才刚刚开始,所以也许我期望太高了,但举个简单的例子:
假设我有 HStack 的 Text() 视图。
|--------------------------------|
| Text("static") Text("Dynamic") |
|________________________________|
当我有 dynamic 内容时,static 文本字符串会随着 HStack 的大小发生变化,而 Text("Dynamic") 发生变化...
我尝试了很多东西,Spacers()、Dividers(),查看了使用PreferenceKeys (link)、Alignment Guides (link) 的方法
最接近答案的似乎是对齐指南,但它们很复杂。
复制 Autolayout 将视图基本锚定到屏幕边缘附近并正确布局而不跳动的典型方法是什么?
我想锚定静态文本“纬度”,这样它就不会跳来跳去。
还有其他示例,因此我们将不胜感激就如何最好地进行布局提供更一般的答案...
有了自动布局,我觉得我选择了一切顺利。使用 SwiftUI 就像是彩票。
示例,显示“纬度”一词随着坐标的变化而跳跃:
示例,代码:
HStack {
Text("Latitude:")
Text(verbatim: "\(self.viewModelContext.lastRecordedLocation().coordinate.latitude)")
}
当我的观点有变化/动态的背景时,我真的很挣扎。所有 WWDC 视频中显示的静态内容都可以正常工作。
潜在解决方案:
像这样使用HStack:
HStack(alignment: .center, spacing: 20) {
Text("Latitude:")
Text(verbatim: "\(self.viewModelContext.lastRecordedLocation().coordinate.latitude)")
Spacer()
}
.padding(90)
结果很好锚定,但我讨厌幻数。
【问题讨论】:
-
你能提供可重现的例子吗?我不清楚什么是“跳来跳去”以及在什么情况下......
-
@Asperi 确定只是一秒钟..
-
更新了@Asperi
-
.font(.monospacedDigit())(我知道这不能回答更深层次的问题,而且我知道有很多情况它不能解决,这就是为什么我不提供它作为答案,但根据我的经验,这确实是数量惊人的案例的答案。) -
谢谢罗伯!欣赏它。
.monospacedDigit()现在似乎是.font(.system(.body, design: .monospaced))
标签: ios swift view autolayout swiftui