簡體   English   中英

appdelegate中的UIButton外觀層不起作用

[英]UIButton appearance layer in appdelegate not working

我想將應用程序中的所有按鈕設為圓形按鈕。

但是UIButton的外觀不會更改appdelegate中的圖層屬性:

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

怎么了?

非常感謝

由於這是一個古老的問題,但卻是相關的,因此您無法使用外觀更改圖層屬性。 有關完整列表,請檢查此頁面

對於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;

如果有人正在尋找一個快速解決此問題的方法,即使在6年后,由於外觀無法管理CALayer,您可以對UIView進行擴展以使其適合外觀,訣竅是在obj變量上使用dynamic關鍵字,這將迫使迅捷使用以下實現:

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)
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM