当我改变UIVIew的bounds.size.height时,frame.origin.y会改变

时间:2011-12-23 04:31:33

标签: ios uiview frame bounds

(我的英语不是很好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}}

3 个答案:

答案 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参数。

希望这有帮助的人