Iphone 为什么更改UIScrollView的框架会更改其子视图的框架?

Iphone 为什么更改UIScrollView的框架会更改其子视图的框架?,iphone,ipad,uiscrollview,positioning,Iphone,Ipad,Uiscrollview,Positioning,这让我感到困惑。我想在方向更改时更改UIScrollView的框架: if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight){ self.myScrollView.frame = CGRectMake(40, 40, 984, 200); for (UIView* view in [self.m

这让我感到困惑。我想在方向更改时更改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像素):


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

您可能在子视图上设置了错误的自动访问标志。您还可以禁用UIScrollView AutoResizesSubView(在Interface builder中或手动)以仅禁用整个行为。

设置此选项是否有帮助

myScrollview.resizesSubviews=否


或者,如果您将uiscrollview子类化,则可以实现LayoutSubView以自定义特定帧大小的布局;)

myScrollView.autoresizesSubviews=否;这就是诀窍。谢谢,没问题。在interface builder+1中还有一个复选框可以禁用它。很好,我遇到了一个与之相关的问题,当父视图框架发生更改时,子视图框架会神秘地发生更改,这让我抓狂,关闭AutoResizesSubView修复了它,谢谢!当我调整UIImageView的父帧时,它消失了,这很有效!谢谢
    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