swift - 将 50 的 layer.cornerRadius 应用于按钮时出现奇怪的结果

标签 swift cocoa-touch uibutton storyboard

我的目标是创建一个带有全圆角的按钮(每边各半个圆)。它应该看起来像这样:

enter image description here

在用户定义的运行时属性中,我将 layer.cornerRadius 设置为 KeyPath,并将 50 设置为 Value(也尝试过设置为 49)。此外,我已将“剪辑 subview ”选项设置为是(如在这个答案中:UIlabel layer.cornerRadius not working in iOS 7.1) 然而,编译结果在我的 iPhone 5c (iOS 9.2.1) 上看起来像这样:

enter image description here

(图片是在 photoshop 中制作的,但它看起来就是这样)

角是圆的,但显然缺少 anchor 。关于如何获得预期结果的任何建议?

最佳答案

cornerRadius 值不会根据按钮高度自动更新,因此,当从 Storyboard/xib 指定它时,您必须确保该值恰好是按钮高度的一半。

通常这是通过将按钮高度设置为常数(使用高度约束)并将 cornerRadius 设置为该常数的一半来实现的(例如,对于您想要的高度 100 cornerRadius,值为 50)。

如果你想要一个自动更新的解决方案,最简单的解决方案是继承 UIButton 并覆盖 layoutSubviews:

override func layoutSubviews() {
   super.layoutSubviews()

   self.layer.cornerRadius = self.frame.size.height / 2.0
}

然后在 xib/storyboard 中,您可以将按钮的类更改为您的自定义类。

关于swift - 将 50 的 layer.cornerRadius 应用于按钮时出现奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35898599/

相关文章:

iphone - 格式化浮点值

Swift 3 - [__NSArrayM objectAtIndex :]: index 3 beyond bounds [0 . 。 2]

Swift 如何迭代字符串中的符号

swift - 向 Swift 命令行工具添加依赖项

swift - 在 Swift 中创建字典时不允许在顶层使用表达式

ios - 为什么我的 UIButton 的 "touch up inside"事件没有被调用?

ios - 如何忽略发送者参数 UIButton

ios - 为什么我的 Google map 应用程序不打印出点击的坐标?

iphone - 什么时候在实例变量前加上下划线?

ios - 访问 UITableView 中嵌套的 UITextField 文本内容