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

3

这让我感到困惑。我想在屏幕方向改变时更改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);
            }
        }

以下是结果。请注意,尽管我只改变了父滚动视图的宽度(在纵向模式下减小了256像素),但所有子视图都向左移动了156像素:

    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

为什么会出现这种情况?如何预防呢?
2个回答

12

可能是您在子视图上设置了错误的自动调整大小标志。您还可以禁用UIScrollView autoresizesSubviews(在界面构建器中或手动)来禁用整个行为。


myScrollView.autoresizesSubviews = NO; 就可以解决问题。谢谢。 - sol
没有问题,界面构建器中也有一个复选框可以禁用它。 - Nimrod
+1 很棒,我遇到了一个类似的问题,当父视图框架改变时,子视图框架神秘地改变,这让我很疯狂,关闭autoresizesSubviews解决了它,谢谢! - Bogatyr
当我调整UIImageView的父视图框架时,它消失了,但这个方法解决了问题!谢谢。 - barfoon

0

也许设置这个会有帮助?

myScrollview.resizesSubviews = NO;

或者如果你正在子类化UIScrollView,你可以实现layoutSubviews来为特定的框架大小自定义布局;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接