Masonry 布局 scrollView

原理
scrollView的高度(纵向滑动时)时靠内部的子控件撑起来的。我们直接给ScrollView布局会发现失败。用层级检查器发现,ScrollVIiw的高度有问题,我们可以选择添加一个UIView容器,约束容器的edge.equalTo(self.scrollView),和 containerView.height.mas_equalTo(self.scrollView);
往这个容器中添加控件,所有子空间相对于容器布局。
最后一个控件不要忘记 添加一个 和 容器底部的约束。否则 容器的高度是0, 里面所有的控件都无法响应手势了。因为 容器的size为0时,手势做坐标转换时响应链到达控制器时不是原来的期望的坐标了。
而且高度为0 的控件本来就是不因该存在的。

//
[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(self.view).offset(kNaviHeight);
    make.left.right.bottom.equalTo(self.view);
    make.width.mas_equalTo(kScreenW);
    make.height.mas_equalTo(kScreenH -(kNavHeight);
}];

//容器
[self.scrollView addSubview:self.conatinerView];
[self.conatinerView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self.scrollView);
    make.width.equalTo(self.scrollView);
}];

[self.subView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(self.someChildView.mas_bottom);
    make.left.right.equalTo(self.conatinerView);//左右约束
    make.height.mas_equalTo(kOneLineItemHeight);
    make.bottom.equalTo(self.conatinerView);//这个不能忘记
}];
posted @   wjwdive  阅读(1717)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示