当superView frameWidth 发生变化时,UIView 不会自动调整大小

Posted

技术标签:

【中文标题】当superView frameWidth 发生变化时,UIView 不会自动调整大小【英文标题】:UIView not autoresizing when the superView frameWidth changes 【发布时间】:2012-07-20 17:28:17 【问题描述】:

所以我有一个名为 footerView 的 UIView,它被添加到 UIScrollView。我已将其初始化如下:

 UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.scrollView_.frameWidth, kFooterViewHeight)];
    [footerView setAutoresizingMask: UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin];
    [footerView setBackgroundColor:[UIColor clearColor]];
 self.footerView_ = footerView;
    [self.scrollView_ setFooterView_:self.footerView_];
    [footerView release];

所以最初 scrollView.frameWidth 设置为 768。但后来它被调整为 450。发生这种情况后,我尝试检查 self.footerView.frameWidth 并且它仍然为 768。这是为什么? 我已经尝试在 footerView 上调用 setNeedsLayout,我确保在 UIScrollView 上设置了自动调整大小的视图,但没有任何反应。

【问题讨论】:

好吧——我很困惑。这是什么页脚视图?它是scrollView contentView 的子视图吗?调整滚动视图的大小时,内容视图不会调整大小。 是的,它是scrollView的一个子视图。真的吗? contentView 没有调整大小?如何使 contentView 调整为 UIScrollView 的宽度 对象 方法末尾的 _ 很难阅读您的代码。不能简单的用@synthezise scrollView = _scrollView;,那你就不用再写self.scrollView了。您可以尝试使用[_scrollView addSubView:_footerView]; 而不是将其分配给对象吗? 是的,您想addSubview 进行任何调整大小。你这是在哪里做的?你可能只想要UIViewAutoresizingFlexibleWidth 我注意到您的页脚视图的原点为 0,0。这对页脚有什么作用?我希望看到像 self.view.frame.size.height - kFooterViewHeight 这样的 y 坐标。或者你是否将它添加到你通过 Interface Builder 或类似的东西添加的一些容器 UIView 中。在那种情况下,它的autoresizingMask 是否也设置正确?整个视图层次结构中的所有视图(页脚视图、其容器、滚动视图等)都需要相应地设置 autoresizingMask(通过编程或通过 IB,视情况而定)。 【参考方案1】:

您可以同时设置灵活边距和灵活宽度。如果需要,视图调整大小,请避免使用灵活边距。

【讨论】:

我这样做了,但没有改变

以上是关于当superView frameWidth 发生变化时,UIView 不会自动调整大小的主要内容,如果未能解决你的问题,请参考以下文章

从 UIImageView 传递触摸到 superview

如何从 superView 的中心给约束一些边距

在某些情况下让 superview 响应 subView 的 UIPanGesture

当superview有手势时collectionView没有调用didSelectItemAtIndexPath

当 SuperViews 约束改变时更新 SubView 约束

当内部按钮触摸时,如何从 Superview 中删除以编程方式创建的子视图?