StackView 内的圆角无法正确显示

Round corners inside StackView not displaying correctly

我的界面生成器中有一个等间距的简单 StackView:

当我 运行 应用程序时,按钮的位置和大小是正确的(完全如界面生成器中所示),但是当我尝试使用以下代码将中间按钮的角圆化时:

override func viewDidLoad() {
    super.viewDidLoad()        
    let maskPath = UIBezierPath(roundedRect: button.bounds,
                                byRoundingCorners: [.bottomLeft,.bottomRight],
                                cornerRadii: CGSize(width: 10.0, height: 10.0))
    let shape = CAShapeLayer()
    shape.path = maskPath.cgPath
    button.layer.mask = shape

}

我得到了错误的结果(按钮的文本不再居中也不再覆盖整个宽度):

问题出在哪里?谢谢

您不应在 viewDidLoad() 中使用 button.bounds,因为此时您的视图的几何结构尚未设置。尝试将您的代码移动到边界正确的 viewWillAppear()viewDidLayoutSubviews()

如果第一个答案仍然不能解决您的问题,请将您的代码包装在 DispatchQueue.main.async {} 中的 viewWillAppeardidAppear.