SwiftUI图像clipsToBounds

Axe*_*min 4 ios swift swiftui

在尝试SwiftUI(Xcode 11.0 beta 2)时,我尝试用图像填充View:

Image("large")
    .resizable()
    .aspectRatio(contentMode: .fill)
    .frame(width: 80, height: 80, alignment: .center)
    .border(Color.black)
Run Code Online (Sandbox Code Playgroud)

这样呈现:

没有剪辑

我想应用类似的东西,UIView.clipsToBounds以便图像被裁剪并且盒子外面的部分不可见。

小智 26

Image("large")
    .resizable()
    .aspectRatio(contentMode: .fill)
    .frame(width: 80, height: 80, alignment: .center)
+   .contentShape(Rectangle())
+   .clipped()
    .border(Color.black)
Run Code Online (Sandbox Code Playgroud)

这帮助我通过图像重叠按钮解决了问题。contentShape() 用于剪辑命中测试区域。Clipped() 正在剪切视图边界内的内容(如其他人提到的)。


Arj*_*tel 22

Image("large")
   .resizable()
   .clipShape(Circle())
   .frame(width: 200.0, height: 200.0)
   .overlay(Circle().stroke(Color.white,lineWidth:4).shadow(radius: 10))
Run Code Online (Sandbox Code Playgroud)

输出


tru*_*duc 5

您可以使用.clipped()修饰符使与UIView.clipsToBounds

Image("large")
    .resizable()
    .aspectRatio(contentMode: .fill)
    .frame(width: 80, height: 80, alignment: .center)
    .border(Color.black)
    .clipped()  // Equal to clipsToBounds = true
Run Code Online (Sandbox Code Playgroud)

  • 请注意,剪裁必须位于框架之后而不是在其之前,否则它将无法工作! (8认同)
  • 重要提示:这在视觉上对我来说非常有用。我发现一个问题,如果图像的剪切区域与按钮重叠,则该按钮将不起作用。尽管看起来很完美,但该按钮不会收到应有的触摸。为了解决这个问题,我必须在将图像发送到 SwiftUI Image 的 init(uiImage:) 之前手动将图像(使用 UIKit)剪切到特定的 CGSize。我希望这对遇到我这种情况的人有帮助!如果有人有更好的方法来处理这个问题,请告诉我。 (7认同)