ios 在 Masonry 中设置 uiscrollview 的 contentsize

标签 ios objective-c uiscrollview masonry

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

现在我有一个 ScrollView 和一组 View 作为 ScrollView 的 subview ,代码是这样的:

[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的 ScrollView ?以下代码无法正常运行,因为在旋转事件中,self.view.frame.size.width改变。
self.scrollview.contentSize = CGSizeMake(self.imageviews.count * self.view.frame.size.width, self.view.frame.size.height);

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

最佳答案

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

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

我写了一个blog post关于这个不久前。它使用 SnapKit,但这基本上只是“Masonry with Swift”的另一个名称。语法几乎相同。它描述了一个垂直 ScrollView ,但这个想法在水平 ScrollView 上是相同的。

还有一件小事:

而不是这样做:

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

你可以这样做:
make.top.equalTo(self.scrollview);

关于ios 在 Masonry 中设置 uiscrollview 的 contentsize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34130922/

相关文章:

ios - 创建预期的 UI 行为,同时也不会收到破坏约束警告

ios - 将核心数据过滤/排序到数组中

iphone - 刷新 UIScrollView/Animation,计时(Objective-C)

objective-c - 如何重定向 URL 以在 ios 应用程序中的 puffin 浏览器而不是 safari 浏览器中打开?

objective-c - 核心数据版本控制——需要多个映射模型

objective-c - 为什么 Swift 中 UIScrollView 的自定义子类必须是 UIGestureRecognizerDelegate?

swift - 在 ScrollView 中显示表格单元格并快速滚动到下一个或上一个

ios - AVAudioPlayer的内存问题

ios - 避免快速重复代码

ios - EXC_BAD_INSTRUCTION 当我在 Swift 2.0 中设置 UILabel 标题时