1

我是 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()

}

问题不是在我第一次启动应用程序时出现(这是第一个场景/视图控制器),而是当我从第二个视图控制器回到这个场景时出现问题。

发生的情况是按钮被格式化了大约半秒钟,然后它们被完美地重新格式化:

格式正确的截图

格式不正确的截图

您会注意到第二张图像(仅出现约 0.5 秒)具有更强烈的角半径。

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

谢谢!

4

2 回答 2

1

感谢大家的反馈,但这是为我解决的问题:

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
}

这取代了原来的帖子:

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 }

谢谢!

于 2018-03-15T18:43:07.767 回答
0

也许你可以试试这个:

https://imgur.com/a9kTt98

或添加到 UIView 的扩展

extension UIView  {
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = (newValue > 0)
        }
    }
}
于 2018-03-11T13:12:29.337 回答