当我更改 UIVIew 的边界时,frame.origin.y 会发生变化,大小.高度



(我的英语不是很好LOL)

我定义了一个UIView对象作为子视图,当我改变subview.bounds.size。高度,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}}

改变边界确实会影响框架:

虽然你可以改变frame, bounds和center属性独立于其他属性,一个属性的改变会影响其他属性

  • 当你设置帧属性时,边界属性中的大小值更改以匹配框架矩形的新大小。中的值属性的新中心点进行类似的更改,以匹配框架矩形。
  • 当你设置center属性时,帧中的原点值会改变因此。
  • 当您设置边界属性的大小时frame属性更改以匹配边界矩形的新大小。

我刚刚遇到了同样的问题。改变视图的边界会改变视图相对于视图中心的锚点的大小。换句话说,如果你有一个帧(0,0,0,0)的视图,然后将它的边界更改为(0,0,100,100),那么新帧将是(-50,-50,100,100)。

最快的解决方法是在更改边界之前记住frame的原点,然后将frame的原点设置回原始值:

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); 

我也遇到过类似的问题:

view.frame = CGRectMake(x, y, width, height); // y felt to 0

问题是在高度,我试图设置负高度。不确定,但我读过一些关于自动调优坏视图参数的东西,但在网上找不到任何相关信息。所以你可以检查你的CGRect参数。

希望对大家有所帮助

最新更新