由 Masonry 初始化后在 UIScrollView 中附加 UIView

Posted

技术标签:

【中文标题】由 Masonry 初始化后在 UIScrollView 中附加 UIView【英文标题】:Append UIView in UIScrollView after init by Masonry 【发布时间】:2016-05-12 08:14:52 【问题描述】:

我使用关于 UIScrollView 的演示,并且我想在 UIScrollView 初始化之后附加一个 UIView 一个 UIView,例如:我单击一个按钮,而不是在 UIScrollView 底部有一个新的 UIView .所以我这样写代码:

- (void)clickButton
    UIView *new = [[UIView alloc]init];
    new.backgroundColor = [UIColor blueColor];
    new.mas_key = @"newView";

    [self.scrollView.contentView addSubview:new];
    [new mas_makeConstraints:^(MASConstraintMaker *make) 
        make.top.equalTo(self.scrollView.lastBottom);
        make.left.equalTo(@0);
        make.right.equalTo(self.scrollView.contentView.mas_right);
        make.height.equalTo(@50);
    ];

    self.scrollView.lastBottom = new.mas_bottom;

    [self.scrollView.contentView mas_updateConstraints:^(MASConstraintMaker *make) 
        make.bottom.equalTo(self.scrollView.lastBottom);
    ];

但是还是有类似的错误

MASLayoutConstraint:0x7f97f431b360 UIView:content.bottom == UIView:newView.bottom
MASLayoutConstraint:0x7f97f4341400 UIView:newView.top == UIView:newView.bottom
MASLayoutConstraint:0x7f97f4341bb0 UIView:newView.height == 50
MASLayoutConstraint:0x7f97f4315390 UIView:content.bottom == UIView:newView.bottom

Will attempt to recover by breaking constraint 
MASLayoutConstraint:0x7f97f4341bb0 UIView:newView.height == 50

表示更新后我的约束没有更新,如何解决?

【问题讨论】:

【参考方案1】:

我认为您的视图框架为零。您需要设置要查看的位置和大小,并且您的约束应该是这样的。

滚动视图:顶部、底部、前导、尾随

滚动视图中的视图(内容视图):顶部、底部、前导、尾随、容器中的水平中心和固定高度

以及您在容器视图中的视图(新):顶部、底部、前导、尾随或根据要求

希望这会有所帮助:)

【讨论】:

我使用 Masonry(一个关于 Autolayout 的框架),如果我删除 self.scrollView.lastBottom = new.mas_bottom;,就会出现新 UIView 的块。但我不能移动到新的 UIView【参考方案2】:

我解决了问题。robertjpayne 在 Github 上回复我的问题。Link here

【讨论】:

以上是关于由 Masonry 初始化后在 UIScrollView 中附加 UIView的主要内容,如果未能解决你的问题,请参考以下文章

Masonry 源码简单解析

Masonry 源码简单解析

Masonry 源码简单解析

Masonry 源码简单解析

jquery masonry在初始页面加载时崩溃,单击“主页”菜单按钮后工作正常

Masonry库的使用