如何在iOS中调整UIView的大小?

10

我有一个主视图和一个嵌套在主视图中的view1,如何调整view1的大小?

以下代码无效:

self.View1.bounds.size.height = self.view.bounds.size.height;
4个回答

20
CGRect frame = self.View1.frame;
frame.size.height = self.view.bounds.size.height;
self.View1.frame = frame;

2
但要小心,只使用bounds或frame其中之一。它们并不相同。例如,当旋转为横向时,frame可能仍具有原始的纵向尺寸,但bounds始终是正确的,因为bounds会受到应用于视图的任何变换(包括旋转)的更新。 - Mike Hay

5

您不能直接修改边界。需要在视图的范围之外修改CGRect。

CGRect viewBounds = self.view1.bounds;
viewBounds.size.height = self.view.bounds.size.height;
self.view1.bounds = viewBounds;

希望这可以帮助到您!

2

我没有足够的声望来对其他答案添加简单评论,所以我将帮助指出一些重要的点:

(1) 如果只是改变大小,请设置新的bounds而不是frame

如果你只是想调整图像的大小(但保持图像在同一位置),那么请按照cdownie的建议设置新的bounds而不是新的frame。例如,如果你有一个指针手的图像,并想让它看起来像在点击屏幕,那么快速缩小和放大bounds的大小将实现这个效果,并且如果你在图像中心设置锚点,它将保持相同的屏幕位置。如果像Tony Friz建议的那样更改了frame,那么在图像大小缩小时,图像将拉到其左上角(除非你使用额外的数学方法进行修正)。

(2) 如果在nib或storyboard中创建图像,请关闭自动布局和自动调整大小

Autolayout需要在移动或调整图像大小的任何视图上关闭。如果保留它,行为将会是奇怪和不可预测的。同时,在关闭Autolayout后,进入图像的大小检查器并设置正确的原点(例如中心),通过点击自动调整网格中的任何实线直到所有实线变成虚线来禁用所有自动调整约束。这样,您就可以通过更改“center”属性来完全控制图像位置,并通过设置新的“bounds”来调整大小。
希望这有所帮助, Erik

1
[self.View1 setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.x, self.view.frame.size.height, self.view.frame.size.height)];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接