当superview也获得角半径时,子视图的SwiftUI角半径会发生变化

Posted

技术标签:

【中文标题】当superview也获得角半径时,子视图的SwiftUI角半径会发生变化【英文标题】:SwiftUI Corner radius of child view changes when superview also gets corner radius 【发布时间】:2020-01-20 19:37:29 【问题描述】:

我在为视图设置正确的角半径时遇到问题。假设我有这样的观点:

HStack 
    Text("Hello").padding().background(Color.red).cornerRadius(.infinity)

看起来像这样:

如您所见,边角是完美的圆形,这是想要的效果。 问题是,当我向超级视图添加圆角半径时,在本例中为HStack,我的子视图的圆角半径开始超过使圆角完美圆润的边界:

HStack      
    Text("Hello").padding().background(Color.red).cornerRadius(.infinity)
.cornerRadius(16)

问题是,如何确保子视图的圆角半径与第一张图片一样完美?

【问题讨论】:

第二张图片结果的代码是什么? @SimonePistecchia 与上面相同,但在 HStack 上有一个角半径,我编辑了问题以显示完整示例。 我不知道你为什么只用一个元素将 HStack 舍入,但也许如果你在 Text 前后添加 Space(),HStack 就不会侵蚀红色按钮 我提供的示例被简化以关注问题。在之前和之后添加Spacer() 不起作用。 【参考方案1】:

事实证明,我必须将视图包装在一个合成组中才能使其工作。

这里的工作示例:

HStack 
    Text("Hello")
    .padding()
    .background(Color.red)
    .cornerRadius(.infinity)
    .compositingGroup()
.cornerRadius(16)

【讨论】:

以上是关于当superview也获得角半径时,子视图的SwiftUI角半径会发生变化的主要内容,如果未能解决你的问题,请参考以下文章

如何为一些子成员设置卡片视图的角半径?

当内部按钮触摸时,如何从 Superview 中删除以编程方式创建的子视图?

如何为 CALayer 的角半径设置动画

在 Superview 中更改子视图的框架

具有拐角半径和阴影视图的 UIView 不会在拐角处剪辑子视图

无法从 superview-Xcode6 中删除子视图