使用 viewDidLayoutSubviews() 自动调整角半径大小,在显示之前不更新视图
Auto resizing corner radius using viewDidLayoutSubviews() not updating the view before it is displayed
我是 swift 和 Xcode 的新手,所以可能有一个简单的答案或更好的方法来做到这一点。我正在尝试为所有尺寸 iOS 设备的按钮制作圆角边缘,到目前为止我发现的最佳方法是使用此方法:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for i in 0..<buttons.count {
self.buttons[i].layer.cornerRadius = self.buttons[i].bounds.size.height / 2
}
examResultsBackButtonOutlet.layer.cornerRadius = examResultsBackButtonOutlet.bounds.size.height / 2
}
// Build UI
func loadUI() {
// Round the edges, change color background, font
titleOutlet.mainMenuStyle("", 75, earthGreenWithAlpha)
for i in 0..<buttons.count {
buttons[i].mainMenuStyle("", 40)
}
print("Main Menu successful load")
}
我在我的 viewDidLoad 方法中调用 loadUI() 方法是为了它的价值:
//MARK: viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
// Load the UI
loadUI()
loadExamResultsView()
mainMenu()
examResultsStackView.isHidden = true
loadStoredScores()
loadStoredSettings()
}
问题不是在我第一次启动应用程序时出现(这是第一个 scene/View 控制器),而是当我从我的第二个视图控制器返回到此场景时出现问题。
发生的事情是按钮的格式奇怪了大约半秒钟,然后它们被完美地重新格式化:
Correctly formatted screenshot
Incorrectly formatted screenshot
您会注意到第二张图片(仅出现约 0.5 秒)的角半径要大得多'。
我怎样才能防止这种情况发生,以便用户只能看到每个按钮的完美圆角半径,而不是糟糕的简陋按钮?
谢谢!
也许你可以试试这个:
或添加到 UIView 的扩展
extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = (newValue > 0)
}
}
}
感谢大家的反馈,但这是为我解决问题的方法:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
for i in 0..<buttons.count {
self.buttons[i].layer.cornerRadius = self.buttons[i].bounds.size.height / 2
}
examResultsBackButtonOutlet.layer.cornerRadius = examResultsBackButtonOutlet.bounds.size.height / 2
}
这取代了原来的post:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for i in 0..<buttons.count {
self.buttons[i].layer.cornerRadius = self.buttons[i].bounds.size.height / 2
}
examResultsBackButtonOutlet.layer.cornerRadius = examResultsBackButtonOutlet.bounds.size.height / 2 }
谢谢!
我是 swift 和 Xcode 的新手,所以可能有一个简单的答案或更好的方法来做到这一点。我正在尝试为所有尺寸 iOS 设备的按钮制作圆角边缘,到目前为止我发现的最佳方法是使用此方法:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for i in 0..<buttons.count {
self.buttons[i].layer.cornerRadius = self.buttons[i].bounds.size.height / 2
}
examResultsBackButtonOutlet.layer.cornerRadius = examResultsBackButtonOutlet.bounds.size.height / 2
}
// Build UI
func loadUI() {
// Round the edges, change color background, font
titleOutlet.mainMenuStyle("", 75, earthGreenWithAlpha)
for i in 0..<buttons.count {
buttons[i].mainMenuStyle("", 40)
}
print("Main Menu successful load")
}
我在我的 viewDidLoad 方法中调用 loadUI() 方法是为了它的价值:
//MARK: viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
// Load the UI
loadUI()
loadExamResultsView()
mainMenu()
examResultsStackView.isHidden = true
loadStoredScores()
loadStoredSettings()
}
问题不是在我第一次启动应用程序时出现(这是第一个 scene/View 控制器),而是当我从我的第二个视图控制器返回到此场景时出现问题。
发生的事情是按钮的格式奇怪了大约半秒钟,然后它们被完美地重新格式化:
Correctly formatted screenshot
Incorrectly formatted screenshot
您会注意到第二张图片(仅出现约 0.5 秒)的角半径要大得多'。
我怎样才能防止这种情况发生,以便用户只能看到每个按钮的完美圆角半径,而不是糟糕的简陋按钮?
谢谢!
也许你可以试试这个:
或添加到 UIView 的扩展
extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = (newValue > 0)
}
}
}
感谢大家的反馈,但这是为我解决问题的方法:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
for i in 0..<buttons.count {
self.buttons[i].layer.cornerRadius = self.buttons[i].bounds.size.height / 2
}
examResultsBackButtonOutlet.layer.cornerRadius = examResultsBackButtonOutlet.bounds.size.height / 2
}
这取代了原来的post:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for i in 0..<buttons.count {
self.buttons[i].layer.cornerRadius = self.buttons[i].bounds.size.height / 2
}
examResultsBackButtonOutlet.layer.cornerRadius = examResultsBackButtonOutlet.bounds.size.height / 2 }
谢谢!