1. frame的尺寸和位置不对 \ 或者其实传入的是个空值
2. hidden是否为YES
3. 控件是否确实已经添加到父控件中
4. alphe 是否小于 0.01 (当透明度设置很低的时候 , 直接等于隐藏了控件)
5. 被其他控件挡住了
6. 看一看这个控件的父控件前面5种情况有没发生
总结一下 :
像以下情况 : 假如在init方法中设置frame bounds这里的值是0的,所以frame是0的
实际上任何UIView的 任何Init 方法里面的 bounds,frame等值,都是0
- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithReuseIdentifier:reuseIdentifier]) { //创建子控件 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = self.bounds; // 这里的bounds的值是0 [self.contentView addSubview:btn]; UILabel *countlabel = [[UILabel alloc] init]; [self.contentView addSubview:countlabel]; } return self; }
所有控件初始化方法里,并不适合设置宽高,所以一般在以下方法中去设置
/** * 一般重写这个方法,去设置frame * 当一个控件的frame发生改变时,就会调用(改变一次调用一次) * 一般在这里布局内部的子控件(设置子控件的frame) */ - (void)layoutSubviews { //一定要调用父控件的layoutSubviews方法 [super layoutSubviews]; }