当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 不会自动调整大小的主要内容,如果未能解决你的问题,请参考以下文章
在某些情况下让 superview 响应 subView 的 UIPanGesture
当superview有手势时collectionView没有调用didSelectItemAtIndexPath