美文网首页
UIAppearance

UIAppearance

作者: LX2014 | 来源:发表于2017-06-30 12:00 被阅读64次

1,系统控件的使用及注意实现

注意:
1,+appearance 在设置之后的控件才起作用,这就是为什么在控制器中通过appearance修改了导航栏的属性,而该导航栏的实例属性没有改变的原因(这种情况应该通过实例获取,并修改属性),但是如果下一个导航栏生效后,原来的导航栏也会全局改变,例如,在A页面中appearance全局修改导航栏为蓝色,那么A push到B,导航栏没有从新生成,原来的导航栏还是默认颜色不会变成蓝色,但是如果A present一个带有导航栏的控制器C,那么C的导航栏会变成蓝色,dismiss到A,A的导航栏也会变成蓝色(是不是很意外)。
2,只有标记UI_APPEARANCE_SELECTOR(OC)或 swift中是在方法或属性前面添加dynamic才会生效。
3,appearanceWhenContainedIn:接收可选参数,实现设置某些类中才有效的全局属性。
参考:http://www.cocoachina.com/ios/20150723/12671.html

2,自定义控件实现UIAppearance

比如自定义的一个弹框控件,在a app中显示的确定取消按钮是红色,在b app中显示的是绿色,这个全局的控制可以通过一个静态变量保存属性来设置,也可以通过UIAppearance来实现:

// RoundLabel.h

@interface RoundLabel : UILabel

@property (nonatomic, assign) CGFloat borderWidth UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) CGFloat cornerRadius UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) UIColor *borderColor UI_APPEARANCE_SELECTOR;

@end

@implementation RoundLabel

- (void)drawRect:(CGRect)rect {

    [super drawRect:rect];

    self.layer.borderColor = _borderColor.CGColor;
    self.layer.cornerRadius = _cornerRadius;
    self.layer.borderWidth = _borderWidth;
}

- (void)setBorderWidth:(CGFloat)borderWidth {
    _borderWidth = borderWidth;
}

- (void)setCornerRadius:(CGFloat)cornerRadius {
    _cornerRadius = cornerRadius;
}

- (void)setRectColor:(UIColor *)rectColor {
    _borderColor = rectColor;
}
@end

但这里有个疑问,RoundLabel的
+ (void)initialize {
[[self appearance] setCornerRadius:5];
[[self appearance] setBorderWidth:2];
[[self appearance] setBorderColor:[UIColor cyanColor]];
}
方法中默认设置了属性,在控制器中初始化label1然后再通过appearance修改全局属性,再添加label2(不单独设置实例属性)结果是label1和label2的borderWidth等属性是一样。我猜测是上面的控件label1在添加后其实还没有真正渲染,拿取属性是在渲染的时候获取的。

相关文章

  • UIAppearance

    今天想聊的是UIKit: UIAppearance UIAppearance是什么? UIAppearance实际...

  • App主题

    UIAppearance Tutorial

  • 主题方案

    主题方案 方案一:通过原生接口UIAppearance(废弃) 凡是遵循UIAppearance协议的控件都可以在...

  • ios注意问题

    1.使用UIAppearance注意的问题 如果不熟悉可以点击了解, UIAppearance它的目的就是设置全局...

  • Appearance

    UIAppearance是一个协议 UIView默认已经遵守了这个协议 来看看UIAppearance都有什么方法...

  • UIAppearance

    一、UIApplication 1.简单介绍 1). UIApplication对象是应用程序的象征,一个UIAp...

  • UIAppearance

    1,系统控件的使用及注意实现 注意:1,+appearance 在设置之后的控件才起作用,这就是为什么在控制器中...

  • UIAppearance

    http://www.cnblogs.com/T15053781465/p/5654772.html http:/...

  • UIAppearance

    这两天学习的时候看到了UIAppearance这个协议 一开始不知道是干什么的 就点进去看了看; 自定义类的所有实...

  • UIAppearance

    爱上

网友评论

      本文标题:UIAppearance

      本文链接:https://www.haomeiwen.com/subject/fsubcxtx.html