【问题标题】:ios set contentsize of uiscrollview in Masonryios 在 Masonry 中设置 uiscrollview 的 contentsize
【发布时间】:2015-12-07 10:06:01
【问题描述】:

我使用纯代码(不是 storyboard 或 xib)来设置所有视图的大小,我不想使用硬代码来设置 frame,所以我使用 Masonry。

现在我有一个滚动视图和一组视图作为滚动视图的子视图,代码是这样的:

[self.scrollview addSubview:[self.imageviews objectAtIndex:0]];
[[self.imageviews objectAtIndex:0] mas_makeConstraints:^(MASConstraintMaker *make) {
    make.size.equalTo(self.scrollview);
    make.top.equalTo(@0);
    make.left.equalTo(@0);
}];
for (NSInteger i = 1; i < maxcnt ; i++) {
    [self.scrollview addSubview:[self.imageviews objectAtIndex:i]];
    UIImageView *previous = [self.imageviews objectAtIndex:i-1];
    [[self.imageviews objectAtIndex:i] mas_makeConstraints:^(MASConstraintMaker *make) {
        make.size.equalTo(self.scrollview);
        make.top.equalTo(@0);
        make.left.equalTo(previous.mas_right);
    }];
}

但是问题来了:

1) 如何使用 Masonry 设置滚动视图的contentsize?以下代码无法正常运行,因为在旋转事件中,self.view.frame.size.width 发生了变化。

self.scrollview.contentSize = CGSizeMake(self.imageviews.count * self.view.frame.size.width, self.view.frame.size.height);

2)如果我必须使用上面的代码来设置,如何处理旋转事件使contentsize更新好。

【问题讨论】:

    标签: ios objective-c uiscrollview masonry


    【解决方案1】:

    你快到了。您所要做的就是在最后一个图像视图上设置一个正确的约束。通过这样做,您可以在 contentView 的左侧和右侧之间创建一个“连接”。这样,UIScrollView“知道”子视图需要多少空间并相应地调整contentSize

    根本不需要设置contentSize。自动布局会为您处理此问题,并且在旋转设备时也可以使用。

    不久前我写了一封blog post 来讨论这个问题。它使用 SnapKit,但这基本上只是“Masonry with Swift”的另一个名称。语法几乎相同。它描述了一个垂直滚动视图,但在水平滚动视图上的想法是相同的。

    还有一件小事:

    不要这样做:

    make.top.equalTo(self.scrollview.mas_top);
    

    你可以这样做:

    make.top.equalTo(self.scrollview);
    

    【讨论】:

    • 你确定吗,伙计?如果我没有明确设置contentsize,则滚动视图根本不会滚动。
    • 100% 确定。如果在最后一个子视图上设置正确的约束,它将开始滚动。滚动视图不会滚动,因为没有缺少 right 约束,它无法知道 contentView 的大小。
    • 非常感谢!这样可行。你的博客也很棒。
    • 谢谢,很高兴能帮上忙。
    • 如果contentsize的高度小于屏幕高度,scrollview不能反弹,你有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多