在watchOS中使用.listRowBackground时如何将cornerRadius添加到SwiftUI列表单元格?

时间:2019-10-07 12:05:29

标签: watchkit swiftui

我正在尝试在手表上使用普通的List,并在每个单元格上放置一个listRowBackground图片。

但是,当我将图像设置为listRowBackground时,标准List的拐角半径就消失了(见下文)。

我尝试设置在Cell-background本身中修改过的View,但这会导致相同的问题。 看着Visual View Debugger,似乎背景图像远远超出了单元格本身。

struct ListView: View {
    @ObservedObject var model: ListModel

    var body: some View {
        List {
            ForEach(self.model.items) { item in
                NavigationLink(destination: PlayerView(item: item)) {
                    ListCell(item: item).frame(height: 100)
                }
                .listRowBackground(Image(uiImage: item.image)
                .resizable()
                .scaledToFill()
                .opacity(0.7)
                )
            }
        }
        .listStyle(CarouselListStyle())
        .navigationBarTitle(Text("Today"))

    }
}

@available(watchOSApplicationExtension 6.0, *)
struct ListCell: View {
    var item: ListItem

    var body: some View {
        VStack(alignment: .leading) {
            Text("\(self.item.length) MIN . \(self.item.category)")
                .font(.system(.caption, design: .default))
                .foregroundColor(.green)
                .padding(.horizontal)
                .padding(.top, 2)
            Text(self.item.title)
                .font(.headline)
                .lineLimit(2)
                .padding(.horizontal)
        }
    }
}

图片:带有背景图片:

w/ background image

图片:无背景图片:

w/o background image

3 个答案:

答案 0 :(得分:1)

您是否尝试将clipped()添加到NavigationLink

答案 1 :(得分:1)

这对我有效 Xcode 11.5 ,只需添加.clipped().cornerRadius(10)修饰符即可。

List {
         Text("Sample cell text")
            .listRowBackground(
               Color(.blue)
               .clipped()
               .cornerRadius(10))
      }

答案 2 :(得分:0)

我知道了!

我将图像包裹在GeometryReader内,并将clipped()cornerRadius(10)添加到GeometryReader

然后将buttonStyle(PlainButtonStyle())添加到NavigationLink

    private func backgroundImage() -> some View {
        return GeometryReader { g in
            Image(<image>)
                .resizable()
                .blur(radius: 2)
                .scaledToFill()
                .frame(width: g.size.width, height: g.size.height)
        }
        .clipped()
        .cornerRadius(10)
    }

,然后将.listRowBackground(self.backgroundImage())添加到NavigationLink