Swift可重用导航链接
我的视图中有以下内容,其中NavigationLink的格式在几个方面是相同的。我希望能够减少重复,并为每个人重复使用相同的内容。我已经看到按钮可以这样做,但找不到导航链接的答案-这可能以类似的方式实现吗Swift可重用导航链接,swift,swiftui,Swift,Swiftui,我的视图中有以下内容,其中NavigationLink的格式在几个方面是相同的。我希望能够减少重复,并为每个人重复使用相同的内容。我已经看到按钮可以这样做,但找不到导航链接的答案-这可能以类似的方式实现吗 NavigationLink(destination: FairRentView(viewModel: FairRentViewModel(Amounts(), housemates: 1))) { Text("
NavigationLink(destination: FairRentView(viewModel: FairRentViewModel(Amounts(), housemates: 1)))
{
Text("1")
.fontWeight(.bold)
.font(.title)
.lineLimit(0)
.padding()
.frame(minWidth: 0, maxWidth: 250, alignment: .center)
.background(gradient)
.foregroundColor(.white)
.padding(2)
.overlay(
RoundedRectangle(cornerRadius:20)
.stroke(gradient, lineWidth:15)
)
.overlay(
Image(systemName: "person.crop.circle.badge.plus")
.font(.largeTitle)
.padding(.leading)
.foregroundColor(.white)
, alignment: .leading)
.padding(5)
}
NavigationLink(destination: FairRentView(viewModel: FairRentViewModel(Amounts(), housemates: 2)))
{
Text("2")
.fontWeight(.bold)
.font(.title)
.padding()
.frame(minWidth: 0, maxWidth: 250, alignment: .center)
.background(gradient)
.foregroundColor(.white)
.padding(2)
.overlay(
RoundedRectangle(cornerRadius:20)
.stroke(gradient, lineWidth:15)
)
.overlay(
Image(systemName: "person.crop.circle.badge.plus")
.font(.largeTitle)
.padding(.leading)
.foregroundColor(.white)
, alignment: .leading)
.padding(5)
}
您可以在扩展中使用修饰符,如下所示
extension Text {
func styledLinkLabel<V: View & ShapeStyle>(with gradient: V) -> some View {
self.fontWeight(.bold)
.font(.title)
.padding()
.frame(minWidth: 0, maxWidth: 250, alignment: .center)
.background(gradient)
.foregroundColor(.white)
.padding(2)
.overlay(
RoundedRectangle(cornerRadius:20)
.stroke(gradient, lineWidth:15)
)
.overlay(
Image(systemName: "person.crop.circle.badge.plus")
.font(.largeTitle)
.padding(.leading)
.foregroundColor(.white)
, alignment: .leading)
.padding(5)
}
}
如果将
.fontwweight(.bold).font(.title)
替换为.font(font.title.weight(.bold))
可以将其作为视图扩展名(而不仅仅是文本)。
NavigationLink(destination: FairRentView(viewModel: FairRentViewModel(Amounts(), housemates: 2)))
{
Text("2")
.styledLinkLabel(with: gradient)
}