Cell相关

非等高cell的自动布局 。

  • 在设置多行的label的时候 ,在计算高度的时候有可能有误差 ,要设置cell的最大文字宽度 。cell.contentLabel.preferredMaxLayoutWidth来修改正确 。
  • 在设置tabelView的行高是 ,可以先设置 大概 的高度来先让tabelView创建cell实例 。然后拿到cell计算自己的高度 。
  • 在计算高度的时候 ,要把数据填充给cell的UI上 ,才能让系统自动计算label 的高度,这个时候我们要手动让cell实现UI布局 。需要调用 cell setLayoutIfNeed 这样就会强制布局 。
  • 在cell中计算好了自己的高度以后 ,再把高度存在数据模型的高度属性中 ,这样就只需要让自己的cell计算自身高度一次 ,以后就直接在数据模型中取高度属性就可以了 。

在做cell的删除增加是 ,调用 relodeDate 会把所有的cell都重新加载 ,可以用insertRowsAtIndexPaths方法 ,增加了动画,同时,只会刷新增加的cell不会浪费性能 。删除是deleteRowsAtIndexpaths

UILabel 只有设置了文字显示了UI以后 ,才会正确的计算自己的高度(宽度)。

调整button 中文字或者图片的位置 。设置内边距

TextField 中有 leftViewrightView 。设置空的时候,就可以调整输入文字的站位位置 。注意设置以后还说说明 他们什么时候需要显示 leftViewMode

键盘上升 ,改变UI布局位置高度 。可以直接修改约束 。约束也是可以拖线的 。

transfrom 控制旋转,缩放 ,平移 。
是一个结构体 。初始化 xx.transfrom = CGAffineTransfromMake() 。

  • 平移的初始化 CGAffineTransfromMakeTranslation = ()
  • 缩放 CGAffineTransfromMakeScake = ()
  • 旋转 CGAffinetransfromMakeRotation = ()
    注意 。transfrom 是相对于最初的形状的 。所以每次传一样的值 ,不会累变 。

当transfrom = CGAffineTransfromIdentity 就是清空所有的transfrom 。

UIButton 自定义文字图片位置

可以重写两个方法

-(CGRect)imageRectForContentRect:(CGRect):contentRect
-(CGRect)titleRectForContentRect:(CGRect):contentRect

也可以直接在UIButton 的子类中实现 layoutSubviews 重新布局button的子控件 。

tableView de head foot view 的宽度会自动的填充全屏

写代理方法的时候 ,最好命名和官方的一样 。用类名开头 ,参数中把自身的实力传出来 。

KVO

监听属性 。

所有的控制器 ,默认的AutoresizingMask 都是包含两个值:Height 和width 所以会随之父视图的高宽而自动伸缩的 。

所以有的时候要关闭自动伸缩功能 。UIAutoresizingNone

当一个控制器被添加到另一个控制器上 ,成为他的子控制器的时候 ,会调用方法 :didMoveToParentViewControll

TabbarControll 的导航控制条 ,会给Vc第一个添加的控件设置一个64高度的内边距 ,下压控件 ,往上滚动的时候 ,可以穿过导航条 ,因为那个位置还是属于控件的 ,只是因为有了内边距 。 就有了透明模糊的导航条效果 。 注意 :它只会给第一个控件加 。

因为控制器的属性 :automaticallyAdjustsScrollViewInsets .自动调整scrollView的位置 。


在C语音中 ,全局变量,即使不在同一个文件 ,也不能重名 。

static

  • 修饰局部变量:只会创建一次 。只有一份内存 。但是要注意 ,它的作用域不会变 ,仍然是局部变量 。仅仅是改变了生命周期
  • 修饰全局变量:全局变量不能重名 。用extern 引用以后 ,外部的文件也可以找到这个全局变量 。 用static 就是可以禁止外部访问 。所以全局变量是不安全的 。

Copy

也是强指针

  • copy返回的是不可变的 。
  • mutableCopy返回的是可变的 。
  • 如果是可变的对象调用 。返回的都是新的对象 。
  • 如果是不可辨的对象调用 ,copy返回本身 ,mutableCopy返回新的对象 。

所以 ,只有不可变的对象copy 才是浅拷贝

手势中有属性.view

就可以拿到他添加在什么上面 就能区分控件 。

添加控制器本身不会消耗很多内存资源 ,加载控制器的view才会 。所以 ,在加载容器的view时 ,可以考虑懒加载 。

scrollViewDidEndDecelerating:(scrollView*)

人为的停止拖拽会调用 。系统直接设置偏移 ,不会调用 。

scrollViewDidEndScrollingAnmiation:(scrollView*)

你可能感兴趣的:(Cell相关)