为什么修饰语的顺序有时会被忽略?
据我理解,如果同一个修饰符被多次应用到一个视图上,离视图最近的修饰符应该覆盖后面应用的那个。然而,我注意到有些行为并不一致。
请看下面的示例:
VStack {
Text("Text 1st")
.font(.title2)
.fontDesign(.rounded) // is ignored
.fontWeight(.bold)
.fontDesign(.serif) // 2nd. modifier wins
Text("Text 2nd")
.font(.title2)
.fontWeight(.bold) // 1st. modifier wins
.fontDesign(.rounded)
.fontWeight(.ultraLight) // is ignored
}
在第一个 Text 中,尽管它在另一个字体修饰符之后,.serif fontDesign 仍然被应用。
然而,在第二个例子中,当使用 .fontWeight 时,.bold 修饰符的行为符合预期并覆盖下面的那个。
在这种情况下,为什么 fontDesign 的行为与 fontWeight 不同?SwiftUI中修饰符顺序的工作方式是否存在例外,还是我遗漏了什么?
解决方案
每个修饰符都各不相同,但文档通常会提示其工作原理。
设置此视图中文本的字体设计。
在这种情况下,有一种方法可以通过 nil 阻止较高层的修饰符。
可用的字体设计之一。传入nil将移除在视图层级中较高位置应用的任何字体设计修饰符的效果。
.fontDesign(nil)
https://developer.apple.com/documentation/swiftui/view/fontdesign(_:)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。