当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 中删除以编程方式创建的子视图?