2010-10-14 98 views
3

这对我来说是令人困惑的。我想在改变方向时更改UIScrollView的框架:为什么更改UIScrollView的框架会更改其子视图的框架?

if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight){ 

      self.myScrollView.frame = CGRectMake(40, 40, 984, 200); 
      for (UIView* view in [self.myScrollView subviews]){ 
       NSLog(@"subview x: %f", view.frame.origin.x); 
      } 

     } 
     else{ 

      self.myScrollView.frame = CGRectMake(40, 40, 728, 200); 
      for (UIView* view in [self.myScrollView subviews]){ 
       NSLog(@"subview x portrait: %f", view.frame.origin.x); 
      } 
     } 

以下是结果。需要注意的是子视图都移到156个像素左边,尽管我所做的只是更改父滚动视图(在纵向模式下256像素较小)的宽度:

subview x: 0.000000 
    subview x: 128.000000 
    subview x: 256.000000 
    subview x: 384.000000 

    subview x portrait: -156.000000 
    subview x portrait: -28.000000 
    subview x portrait: 100.000000 
    subview x portrait: 228.000000 

为什么?我如何防止这种情况?

回答

11

您可能在子视图上设置了错误的autorisize标志。您还可以禁用UIScrollView autoresizesSubviews(ininterface builder或手动)来禁用整个行为。

+0

myScrollView.autoresizesSubviews = NO;做的伎俩。谢谢。 – sol 2010-10-14 18:37:25

+0

没有问题。还有一个复选框来禁用它在界面生成器 – Nimrod 2010-10-14 19:06:30

+0

+1非常好,我有一个相关的subview框架的问题神秘地改变,当父视图框架改变,这是让我疯狂,关闭autoresizesSubviews修复它,谢谢! – Bogatyr 2011-02-22 13:08:59

0

也许设置这chould帮助?

myScrollview.resizesSubviews = NO;

,或者如果你继承的UIScrollView你可以实现layoutSubviews自定义您的布局一定帧大小;)

相关问题