UIButton Round Corner 在 iPhone 5 上无法正常工作

Posted

技术标签:

【中文标题】UIButton Round Corner 在 iPhone 5 上无法正常工作【英文标题】:UIButton Round Corner not working properly on iPhone 5 【发布时间】:2017-01-31 20:20:22 【问题描述】:

这是通过UI扩展方法

extension UIView 
func roundCorners(corners:UIRectCorner, radiusWidth: CGFloat,radiusHeight: CGFloat) 
    let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radiusWidth/2, height: radiusHeight/2))
    let mask = CAShapeLayer()
    mask.path = path.cgPath
    self.layer.mask = mask

通过这种扩展方法,我想在 viewdidload 上使用此代码制作带圆角的按钮

 btnRideNow.roundCorners(corners: [.topRight], radiusWidth: btnRideNow.frame.width,radiusHeight: btnRideNow.frame.height )
 btnRideLater.roundCorners(corners: [.topLeft], radiusWidth: btnRideLater.frame.width,radiusHeight: btnRideLater.frame.height )

但在 iPhone 5 上我得到了这个结果 ScreenShot

您可以看到左键无法正确呈现,但在 iPhone 6 中却可以正常显示,为什么?

【问题讨论】:

【参考方案1】:

一切都是时间问题。

如果你打电话给roundCorners太快了,例如在viewDidLoad 中,按钮的framebounds 可能尚未最终确定。但是你的roundCorners 依赖于bounds,所以如果你添加了掩码并且按钮然后由于layout而调整大小,你自然会弄错结果。

【讨论】:

谢谢我把代码放在 viewDidAppear 上,它可以按我的意愿工作 不过要小心,因为viewDidAppear 可以被多次调用。【参考方案2】:

如果你想要圆角,你可以简单地做:

view.layer.cornerRadius 

如果你想要一个边框,你可以做

view.layer.borderWidth 

颜色

view.layer.borderColor

【讨论】:

【参考方案3】:

这是一个与 IB 一起使用的简单子类。您应该能够轻松地使其适应您的需求:

@IBDesignable
public class Button: UIButton 
    @IBInspectable public var borderColor:UIColor? 
        didSet 
            layer.borderColor = borderColor?.cgColor
        
    
    @IBInspectable public var borderWidth:CGFloat = 0 
        didSet 
            layer.borderWidth = borderWidth
        
    
    @IBInspectable public var cornerRadius:CGFloat 
        get 
            return layer.cornerRadius
        
        set 
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        
    

现在,如果您想简单地编写代码,您已经得到了大部分答案。对于一个完整的圆圈:

view.layer.cornerRadius = view.frame.height / 2

你可以使用宽度,如果它是方形的。但就像@Matt 说的(他非常好),小心正确设置框架/边界后执行此操作!

【讨论】:

这与我的回答有何不同? @Sneak,我不是故意要偷东西的——因为 Matt 的回答被接受了,这才是最重要的。您没有给出 .cornerRadius 需要的完整示例。和平!没有伤害的意思,我马上删除我的答案。我可能是错的,但我一直认为一个需要 MVCE 问题的 Q/A 网站也意味着这个问题的答案。但真诚地,和平。 不需要删除m8,你给出了一个很好的答案,我赞成你的。让它不要删除它:)

以上是关于UIButton Round Corner 在 iPhone 5 上无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XML 获得负半径 Android Round Corner

xml 按钮圆角。字体:https://stackoverflow.com/questions/43494108/round-corner-google-sign-in-button-android

jquery mobile--图标

UIButton 没有为 .infoLight 显示带有“i”的圆圈

交叉浏览器圆角

STA之RC Corner再论