我的目标是确保容器中的文本根据其父级进行缩放。当容器只包含一个 Text 视图时,它工作得很好,如下所示:
import SwiftUI
struct FontScalingExperiment: View {
var body: some View {
Text("Hello World ~!")
.font(.system(size: 500))
.minimumScaleFactor(0.01)
.lineLimit(1)
.padding()
.background(
RoundedRectangle(cornerRadius: 20)
.fill(Color.yellow)
.scaledToFill()
)
}
}
struct FontScalingExperiment_Previews: PreviewProvider {
static var previews: some View {
Group {
FontScalingExperiment()
.previewLayout(.fixed(width: 100, height: 100))
FontScalingExperiment()
.previewLayout(.fixed(width: 200, height: 200))
FontScalingExperiment()
.previewLayout(.fixed(width: 300, height: 300))
FontScalingExperiment()
.previewLayout(.fixed(width: 400, height: 400))
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果:

但是,当我们有更复杂的 View 时,我们不能使用相同的方法根据其父级大小自动缩放文本,例如:
import SwiftUI
struct IndicatorExperiment: View {
var body: some View { …Run Code Online (Sandbox Code Playgroud) 我正在试验来自https://alanquatermain.me/programming/swiftui/2019-11-15-CoreData-and-bindings/ 的代码
我的目标是让 DatePicker 绑定到 Binding< Date? > 允许 nil 值而不是初始化 Date(); 这很有用,如果您的核心数据模型实体中有 Date 属性接受 nil 作为有效值。
这是我的快速游乐场代码:
extension Binding {
init<T>(isNotNil source: Binding<T?>, defaultValue: T) where Value == Bool {
self.init(get: { source.wrappedValue != nil },
set: { source.wrappedValue = $0 ? defaultValue : nil})
}
}
struct LiveView: View {
@State private var testDate: Date? = nil
var body: some View {
VStack {
Text("abc")
Toggle("Has Due Date",
isOn: Binding(isNotNil: $testDate, defaultValue: Date()))
if testDate != …Run Code Online (Sandbox Code Playgroud)