使用 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 秒)的角半径要大得多'。

我怎样才能防止这种情况发生,以便用户只能看到每个按钮的完美圆角半径,而不是糟糕的简陋按钮?

谢谢!

也许你可以试试这个:

https://imgur.com/a9kTt98

或添加到 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 }

谢谢!