获取iOS视图的实际尺寸

时间:2013-02-13 13:05:41

标签: ios uiview addsubview

我如何获得我正在控制的视图或子视图的实际尺寸?例如:

UIView *firstView = [[UIView alloc] initWithFrame:CGRectMake(0,0,200,100)];
[self addSubview:firstView];

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 20, 230, 120)];
[firstView addSubview:button];

如您所见,我的button对象超出了要添加到的视图的尺寸。

考虑到这一点(假设有很多对象被添加为子视图),我如何确定firstView的实际宽度和高度?

3 个答案:

答案 0 :(得分:4)

如果您希望按钮的宽度和高度与firstView相同,则应使用UIView的bounds属性,如下所示:

UIView *firstView = [[UIView alloc] initWithFrame:CGRectMake(0,0,200,100)];
[self addSubview:firstView];

UIButton *button = [[UIButton alloc] initWithFrame:firstView.bounds];
[firstView addSubview:button];

要获得firstView的宽度/高度,您可以执行以下操作:

CGSize size = firstView.bounds.size;
NSInteger width = size.width;
NSInteger height = size.height;

答案 1 :(得分:0)

第一个视图确实是200 x 100.但是,除非使用clipsToBounds,否则不会剪切内部视图。

问题的一个更好的解决方案是停止添加超出维度的视图或停止调整视图大小,以便它们在适当的时候溢出可用空间。

(实际计算包括层次结构中所有子视图的完整边界并不难,只是很多工作实际上不会让你在任何地方。UIView碰巧允许视图大于其容器,但它并不一定能保证什么能正常工作,如果被利用可能会成为错误的来源。clipsToBounds的原因可能是剪辑很昂贵,但在子视图可能的动画期间是必要的在从视图中删除之前,为了效果暂时移出界限。)

答案 2 :(得分:0)

firstview.frame.size.width firstview.frame.size.height