iOS 日常总结二
2020-08-28 本文已影响0人
飞不越疯人院
1. 系统方法用法总结
-
1.
layoutSubviews
: 默认没有做任何事情,UIView
子类中重写;
1.1addSubview
会触发, 如果view
的frame
不为CGRectZero
则会再次触发;
1.2 已经被addSubview
后, 调整其frame
也会触发;
1.3 滚动, 旋转也会触发; -
2.
setNeedsLayout
: 当一个UIView
对象调用此方法时, 相当于做了一个标记, 告知需要重训布局, 当前runloop
周期结束后会调用layoutSubviews
; -
3.
layoutIfNeeded
: 如果布局(frame
,bounds
)发生变化或者有(setNeedsLayout
)标记, 调用此方法会强制立即调用layoutSubviews
; -
4.
drawRect
: 重写UIView
类的此方法进行绘图操作, 在此方法中获取图形上下文进行绘图渲染; -
5.
setNeedsDisplay
: 标记为需要为重绘, 合适时机调用drawRect
; -
6.
setNeedsDisplayInRect
: 标记为局部需要重绘, 合适时机调用drawRect
; -
7.
sizeToFit
: 计算出最优的size
并且改变自己的size
;UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 0, 0)]; [label setBackgroundColor:[UIColor grayColor]]; [label setFont:[UIFont systemFontOfSize:20]]; label.text = @"Test"; #sizeToFit:直接改变了这个label的宽和高,使它根据上面字符串的大小做合适的改变 [label sizeToFit]; NSLog(@"width=%.1f height=%.1f ", label.frame.size.width, label.frame.size.height); [self.view addSubview:label]; #打印结果: 2020-08-25 18:26:29.796009+0800 ViewLayout[2340:264781] width=36.5 height=24.0
-
8.
sizeThatFits
算出最优的size
但是不会改变自己size
;UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 0, 0)]; [label setBackgroundColor:[UIColor grayColor]]; [label setFont:[UIFont systemFontOfSize:20]]; label.text = @"Test"; #sizeThatFits并没有改变原始label的大小 CGSize sizeThatFits = [label sizeThatFits:CGSizeZero]; NSLog(@"sizeThatFits: width=%.1f height=%.1f", sizeThatFits.width, sizeThatFits.height); NSLog(@"width=%.1f height=%.1f", label.frame.size.width, label.frame.size.height); [self.view addSubview:label]; 2020-08-25 18:28:56.611497+0800 ViewLayout[2347:265814] sizeThatFits: width=36.5 height=24.0 2020-08-25 18:28:56.611571+0800 ViewLayout[2347:265814] width=0.0 height=0.0