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 {}
中的 viewWillAppear
或 didAppear
.
我的界面生成器中有一个等间距的简单 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 {}
中的 viewWillAppear
或 didAppear
.