(我的英语不是很好LOL)
我将UIView对象定义为子视图,当我更改subview.bounds.size.height时,更改了subview.frame.origin.y,我的代码中有什么问题吗?
这是我的代码:
- (IBAction)touch
{
static int i = 1;
NSLog(@"%d: Bounds: %@", i, NSStringFromCGRect(self.subView.bounds));
NSLog(@"%d: Frame: %@", i, NSStringFromCGRect(self.subView.frame));
self.subView.bounds = CGRectMake(0.f, 0.f, self.subView.bounds.size.width, self.subView.bounds.size.height + 50);
NSLog(@"%d: Bounds: %@", i, NSStringFromCGRect(self.subView.bounds));
NSLog(@"%d: Frame: %@", i, NSStringFromCGRect(self.subView.frame));
i++;
}
系统输出:
2011-12-23 12:11:29.316 Angry[7959:f803] 1: Bounds: {{0, 0}, {320, 100}}
2011-12-23 12:11:29.318 Angry[7959:f803] 1: Frame: {{0, 0}, {320, 100}}
2011-12-23 12:11:29.319 Angry[7959:f803] 1: Bounds: {{0, 0}, {320, 150}}
2011-12-23 12:11:29.320 Angry[7959:f803] 1: Frame: {{0, -25}, {320, 150}}
2011-12-23 12:11:30.920 Angry[7959:f803] 2: Bounds: {{0, 0}, {320, 150}}
2011-12-23 12:11:30.921 Angry[7959:f803] 2: Frame: {{0, -25}, {320, 150}}
2011-12-23 12:11:30.922 Angry[7959:f803] 2: Bounds: {{0, 0}, {320, 200}}
2011-12-23 12:11:30.923 Angry[7959:f803] 2: Frame: {{0, -50}, {320, 200}}
2011-12-23 12:11:32.080 Angry[7959:f803] 3: Bounds: {{0, 0}, {320, 200}}
2011-12-23 12:11:32.082 Angry[7959:f803] 3: Frame: {{0, -50}, {320, 200}}
2011-12-23 12:11:32.083 Angry[7959:f803] 3: Bounds: {{0, 0}, {320, 250}}
2011-12-23 12:11:32.084 Angry[7959:f803] 3: Frame: {{0, -75}, {320, 250}}
答案 0 :(得分:7)
更改边界确实会影响框架:
虽然您可以更改框架,边界和中心属性 独立于其他属性,对一个属性的更改会影响其他属性 通过以下方式:
- 设置frame属性时,bounds属性中的size值 更改以匹配框架矩形的新大小。中的价值 中心属性同样改变以匹配新的中心点 框架矩形。
- 设置center属性时,框架中的原点值会发生变化 相应地。
- 设置bounds属性的大小时,大小值为 frame属性更改以匹配bounds矩形的新大小。
答案 1 :(得分:3)
我刚遇到同样的问题。事实证明,更改视图上的边界将相对于位于视图中心的锚点调整该视图的大小。换句话说,如果您有一个带有框架(0,0,0,0)的视图,然后将其边界更改为(0,0,100,100),则新框架将为(-50,-50,100,100)。
最快的解决方法是在更改边界之前记住帧的原点,然后将帧的原点设置回原始值:
CGPoint originBeforeResize = self.frame.origin;
self.bounds = CGRectMake(0, 0, SOME_NEW_WIDTH, SOME_NEW_HEIGHT);
self.frame = CGRectMake(originBeforeResize.x, originBeforeResize.y,
self.frame.size.width, self.frame.size.height);
答案 2 :(得分:0)
我遇到过类似的问题:
view.frame = CGRectMake(x, y, width, height); // y felt to 0
问题在于身高,我试图设置负高度。不确定,但我已经阅读了一些关于自动调整坏视图参数的内容,但在网上找不到任何相关内容。 因此,您可以检查CGRect参数。
希望这有帮助的人