随手记

1.tabbarTitle选中

 + (void)load{ // 只会调用一次
// 获取哪个类中UITabBarItem
UITabBarItem *item = [UITabBarItem appearanceWhenContainedIn:self, nil];
// 设置按钮选中标题的颜色:富文本:描述一个文字颜色,字体,阴影,空心,图文混排
// 创建一个描述文本属性的字典
NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
attrs[NSForegroundColorAttributeName] = [UIColor blackColor];
[item setTitleTextAttributes:attrs forState:UIControlStateSelected];
// 设置字体尺寸:只有设置正常状态下,才会有效果
NSMutableDictionary *attrsNor = [NSMutableDictionary dictionary];
attrsNor[NSFontAttributeName] = [UIFont systemFontOfSize:13];
[item setTitleTextAttributes:attrsNor forState:UIControlStateNormal]; }

2.block总结

2.1.block内没有使用外部变量或是只使用了全局/静态变量时.存于全局代码区,为全局block;---(ARC和MRC下一致)
2.2.当使用外部变量时
MRC下,block代码存于栈区;如果此外部变量A存于栈区,那么A会被copy到block分配的栈区;如果A是存于堆区,那么A在block块内与快外相同.
ARC下,block代码存于堆区.如果此外部变量A存于栈区,那么A会被copy到block分配的堆区;/如果A是存于堆区,那么A在block块内与快外相同./->逆传值的情况
2.3.如果需要修改外部变量,需要在变量前面声明__Block;
而当使用下划线Block修饰外部变量时:
MRC下,无论变量A存于栈还是堆区,A在block块内与快外相同;
ARC下,如果此外部变量A存于栈区,那么A会被转移而不是复制到堆区;如果A是存于堆区,那么A在block块内与快外相同.

3.tableView底层实现

①tableView上的cell是系统机子计算的
②cell是的位置是什么时候计算的?
先调用height--->在调用cellfor方法
③tableview底层实现
1.把所有cell位置全部计算好并保存
2.当cell要显示的时候,就会拿到这个cell去设置frame cell.frame = self.frame[row];

4.处理cell分割线

①自定义分割线
②系统属性
self.tableView.separatorInset = UIEdgeInsetsZero;
③万能方式-重写cell的setFrame方法
步骤1:取消系统分割线
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
步骤2:把tableview的背景色设置为分割线的颜色
步骤3:重写cell的setFrame方法

- (void)setFrame:(CGRect)frame {
           frame.size.height -=10;
            //才是真正给cell赋值
            [super setFrame:frame];
}

5.屏幕适配

①view从xib加载,需要重新固定尺寸
② 2.在viewDidLoad设置控件frame好不好,开发中一般在viewDidLayoutSubviews布局子控件
viewDidLayoutSubviews:才会根据布局调整控件的尺寸

你可能感兴趣的:(随手记)