我有一个UIScrollView包含在另一个容器视图中,其约束设置为占用容器视图的所有空间。也就是说我在滚动视图中没有固定的宽度或高度
在我的滚动视图中,我以编程方式添加子视图。每个子视图(内容视图)都是从xib加载的
在xib中,我将任意大小设置为根视图(500x500),但我希望视图宽度自动调整为滚动视图宽度(滚动视图宽度为容器宽度)。
我不希望用户能够水平滚动。
我尝试了不同的解决方案,导致滚动视图可以水平滚动 我试图将内容视图拥抱和压缩属性调整为水平轴上的不同值,但没有成功。
我不想在我的视图上设置固定宽度,因为我希望它们采用容器视图的宽度。
如果您有任何建议,请提前致谢。
答案 0 :(得分:3)
当时我想出的答案是迟到的 当我使用Autolayout时,VChemezov的回答并不令人满意。
我的内容视图有一组顶部,底部,前导,宽度约束。 (宽度而不是尾随,这是我首先做的,但它没有工作)。
所以现在我有这样的事情:
NSLayoutConstraint *leading = [NSLayoutConstraint
constraintWithItem:messageView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.conversationScrollView
attribute:NSLayoutAttributeLeading
multiplier:1.0f
constant:0.0f];
NSLayoutConstraint *width = [NSLayoutConstraint
constraintWithItem:messageView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:self.conversationScrollView
attribute:NSLayoutAttributeWidth
multiplier:1.0f
constant:0.0f];
[self.conversationScrollView addConstraints:@[ top, leading, width ]];
内容视图的宽度等于滚动视图的宽度。
答案 1 :(得分:2)
Autolayout不会调整UIScrolView中的视图大小。您应该自己布局和调整此视图的大小。有两种基本解决方案:
子类UIScrollView并覆盖 setFrame 和 layoutSubviews ,就像这样
@implementation MyScrollView
- (void)setFrame:(CGRect)frame{
[super setFrame:frame];
[self setNeedsLayout];
}
- (void)layoutSubviews{
[super layoutSubviews];
NSArray * subviews=self.subviews;
for(UIView * view in subviews){
CGRect viewFrame=view.frame;
viewFrame.size.width=self.bounds.size.width;
view.frame=viewFrame;
}
}
@end
答案 2 :(得分:1)
使用SnapKit
它甚至更快:
let helper = UIView()
scrollView.addSubview(helper)
helper.snp.makeConstraints { make in
make.width.equalTo(snp.width)
make.leading.trailing.top.equalToSuperview()
make.height.equalTo(0)
}