样式视图传递给 SwiftUI 中的自定义视图
Posted
技术标签:
【中文标题】样式视图传递给 SwiftUI 中的自定义视图【英文标题】:Style views passed to custom view in SwiftUI 【发布时间】:2020-02-19 06:57:32 【问题描述】:我希望能够像这样使用自定义View
:传递给Nav
的视图的数量或类型可以不同。
Nav(
width: 200
)
NavButton("Item 1", action: self.someAction, isActive: true)
NavButton("Item 1", action: self.someAction, isActive: false)
NavTitle("Page 1")
并且它会给出与以下相同的结果:
HStack
NavButton("Item 1", action: self.someAction, isActive: true)
.frame(width: 200 / 3)
NavButton("Item 1", action: self.someAction, isActive: false)
.frame(width: 200 / 3)
NavTitle("Page 1")
.frame(width: 200 / 3)
这个想法是在导航栏中均匀分布项目。
我考虑过使用视图数组并将其作为属性传递,但这对我来说看起来很糟糕。有没有办法和我上面的例子一样,或者有更好的方法吗?
【问题讨论】:
您是否尝试过在两者之间使用 Spacer()? 如果第一个元素的标签比第三个长,会发生什么?我认为中间元素不会在中心,而是稍微向右? 所以在这种情况下,您必须提供标签的宽度和高度以及 .lineLimit(nil) 以获得正确的响应。喜欢下面的答案 以及如何在不为每个元素指定的情况下将元素的宽度和高度应用于自定义视图中的每个元素? 您必须为它创建一个具有高度和宽度的单独类,然后调用它 【参考方案1】:像这样:-
import SwiftUI
struct ContentView: View
var body: some View
HStack
CustomText(text: "kjahsfgdi f")
Spacer()
CustomText(text: "abc")
Spacer()
CustomText(text: "abc")
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
struct CustomText : View
@State var text: String
var body: some View
Text(text)
.lineLimit(nil)
.frame(width: 100, height: nil, alignment: .center)
【讨论】:
以上是关于样式视图传递给 SwiftUI 中的自定义视图的主要内容,如果未能解决你的问题,请参考以下文章