Property
center,position,anchorPoint
- center 描述当前view的中心点在父view上的位置。可通过如下方式计算
center.x = frame.origin.x + frame.size.width * 0.5; center.y = frame.origin.y + frame.size.height * 0.5;
- position CALayer中的属性,当前layer在父layer中的位置
- anchorPoint CALayer中的属性,与positon相对。将一张纸钉在桌面上,钉子在纸上的位置就是anchorPoint,在桌面上的位置就是position
transform
UIView中CGAffineTransform类型属性transform,是定义在二维空间上完成View的平移、缩放、旋转等任务的。
创建基于控件初始位置的变换
- CGAffineTransformMakeTranslation
- CGAffineTransformMakeScale
- CGAffineTransformMakeRotation
创建基于transform参数的变换
- CGAffineTransformTranslate
- CGAffineTransformScale
- CGAffineTransformRotate
sizeToFit函数
Resizes and moves the receiver view so it just encloses its subviews
能够调整当前view,更贴合内部的subviews。以在UILabel
中应用为例
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(300, 20, 30, 10);
label.backgroundColor = [UIColor greenColor];
//label.numberOfLines = 2;
label.text = @"12345670010101010";
[label sizeToFit];
[self.view addSubview:label];
解析
- 如果不设定
label.numberOfLines
,UILabel
会在一行显示所有的内容,如果内容足够多,label
会超出屏幕的范围 - 如果设定
label.numberOfLines=0
,并且内容需要多行显示,则每行在width
的范围内,显示多行,直到显示出全部内容为止 - 如果设定
label.numberOfLines=1
,则会在一行显示所有内容,如果内容足够多,label
会超出屏幕的范围 - 如果设定
label.numberOfLines=n
(n>1),并且内容需要多行显示,则每行在width
的范围内,显示n行,如果不能完全显示内容,则最后一行会出现...
-
注意:
sizeToFit
函数必须在label
设置完成后调用
与sizeThatFits的区别
-
sizeToFit
计算出最合适的size,并将size改为计算出的size -
sizeThatFits
计算出最合适的size,并返回该size,但不改变自身size -
sizeToFit
会调用sizeThatFits
总结
- 由于这两个方法都会改变"UILabel"的宽度,因此想要
UILabel
的宽度限定在某一固定宽度的范围内,就需要设定label.numberOfLines
为大于1的数即可
removeFromSuperview
view
调用了removeFromSuperview
后,只是从superView
上移除,但是view
此时并不为nil(原因:还有指向view的指针,因此view的引用计数不为0),只是不在superView
上显示了而已。有需要的话,需要显式设为nil
(view = nil
,view
的引用计数为0)。
同样的,如果只是将view
显式设为nil
(此时view
还被superview
引用,引用计数不为0),view
仍然显示在屏幕上。如果有需要的话,需要调用removeFromSuperview
将其从屏幕上移除,此时引用计数变为0