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