appdelegate 中的 UIButton 外观层不起作用

Posted

技术标签:

【中文标题】appdelegate 中的 UIButton 外观层不起作用【英文标题】:UIButton appearance layer in appdelegate not working 【发布时间】:2013-12-30 04:45:51 【问题描述】:

我想把应用中的所有按钮都做成圆角按钮。

但 UIButton 的外观不会改变 appdelegate 中的图层属性:

[[[UIButton appearance] layer] setMasksToBounds:YES];
[[[UIButton appearance] layer] setCornerRadius:8.0f];

怎么了?

非常感谢

【问题讨论】:

我建议继承 UIButton 以满足您的需求。 你是对的 vivekvasani...谢谢! 【参考方案1】:

由于这是一个老问题,但它是相关的,您不能使用外观更改图层属性。如需完整列表,您可以查看this page。

对于 UIButton,有效的选项是:

//UIView

@property(nullable, nonatomic,copy) UIColor *backgroundColor UI_APPEARANCE_SELECTOR;

//UIButton

@property(nonatomic) UIEdgeInsets contentEdgeInsets UI_APPEARANCE_SELECTOR;

- (void)setTitleColor:(nullable UIColor *)color forState:(UIControlState)state UI_APPEARANCE_SELECTOR;
- (void)setTitleShadowColor:(nullable UIColor *)color forState:(UIControlState)state UI_APPEARANCE_SELECTOR;
- (void)setBackgroundImage:(nullable UIImage *)image forState:(UIControlState)state UI_APPEARANCE_SELECTOR;

【讨论】:

【参考方案2】:

如果有人正在寻找这个问题的快速解决方案,即使在 6 年后,由于外观无法管理 CALayer,您可以对 UIView 进行扩展以使用外观,诀窍是使用动态关键字 on obj 变量,这将迫使 swift 使用这些实现:

extension UIView 
    @objc dynamic  var borderColor: UIColor? 
        get 
            if let color = self.layer.borderColor 
                return UIColor(cgColor: color)
             else 
                return nil
            
        
        set(color) 
            self.layer.borderColor = color?.cgColor
        
    

    @objc dynamic  var borderWidth: NSNumber? 
        get  return NSNumber(value: Float(self.layer.borderWidth))
        set(width) 
            self.layer.borderWidth = CGFloat(width?.floatValue ?? 0)
        
    

    @objc dynamic  var cornerRadius: NSNumber? 
        get  return NSNumber(value: Float(self.layer.cornerRadius))
        set(radius) 
            self.layer.cornerRadius = CGFloat(radius?.floatValue ?? 0)
        
    

【讨论】:

以上是关于appdelegate 中的 UIButton 外观层不起作用的主要内容,如果未能解决你的问题,请参考以下文章

通过 UIButton 从 Appdelegate 导航到另一个视图

在 AppDelegate 中设置 UIButton 外观时如何更改 SafariViewController 中导航栏的色调

在新库 ViewController 上方添加 UIButton

如何在 uitabbarcontroller 中的 uibutton 单击事件上推送其他视图控制器?

UILabel && UIButton

UIButton