【问题标题】:Why does changing the frame of a UIScrollView change the frames of its subviews?为什么更改 UIScrollView 的框架会更改其子视图的框架?
【发布时间】:2010-10-14 18:21:50
【问题描述】:

这让我很困惑。我想在方向改变时改变 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

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

【问题讨论】:

    标签: iphone ipad uiscrollview positioning


    【解决方案1】:

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

    【讨论】:

    • myScrollView.autoresizesSubviews = NO;成功了。谢谢。
    • 没有问题。在界面生成器中还有一个复选框可以禁用它
    • +1 太好了,当父视图框架发生变化时,我遇到了一个相关的问题,即子视图框架神秘地变化,这让我发疯,关闭 autoresizesSubviews 修复了它,谢谢!
    • 当我调整其父框架时 UIImageView 消失了,这很有效!谢谢。
    【解决方案2】:

    也许设置这个会有所帮助?

    myScrollview.resizedSubviews = NO;

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      相关资源
      最近更新 更多