惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
H
Help Net Security
V
Visual Studio Blog
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
The Cloudflare Blog
Martin Fowler
Martin Fowler
D
Docker
腾讯CDC
F
Fortinet All Blogs
雷峰网
雷峰网
GbyAI
GbyAI
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - 叶小钗

Dvel's Blog

Rime 全拼双拼混输 CHD 油猴脚本:每日签到自动答题 Rime 配置:雾凇拼音 Hammerspoon 自动切换输入法 修复 Hugo 本地图片的累计布局偏移(CLS)问题 macOS 利用 Karabiner 修改 Emacs 键位为 Vim 键位 macOS 修改 Emacs 键位为 Vim 键位 Surge 配置 汉字的混乱 Netflix 中英双语字幕的好办法 优化 Rime 英文输入体验 判断字符是否为简体字或繁体字 Cloudflare 转入域名提示「出现了问题。请重试转移此域。尚未向您收费。」 图片压缩:Squoosh、TinyPNG、ImageOptim、WebP macOS grep + sed 批量替换多个文件的内容 在 macOS 根目录创建文件夹 博客图床小妙招 折腾 Hugo & PaperMod 主题 利用 Cloudflare Workers 进行批量 301 重定向 将博客部署在 Cloudflare Pages Alfred File Navigation(文件导航器)详解 在 Hugo Goldmark Markdown 中设置以新标签打开链接 日期与时间(UTC、GMT、时间戳、时区) 让 Alfred 以新标签的方式打开 Finder 用 git filter-branch 给 Git 仓库瘦身 qBittorrent 设置教程 联通光猫破解+桥接记录 配置 Mac 终端走代理 Steam for Mac 中文游戏推荐 我的 Mac 软件/工具列表
UIScrollView 中使用 Masonry
Dvel · 2017-04-25 · via Dvel's Blog

昨天耽误了一阵子在 scrollView 的布局上,记录一下。

如果可以提前确定 scrollViewcontentSize,就简单多了,但这种情况很少。

一般还是按照 subViews 自适应的比较合适,这样就需要一个 containerView 来撑起 scrollViewcontentSize

简单的代码示例:

UIScrollView *scrollView = [UIScrollVie new];
[self.view addSubview:scrollView];
                            
UIView *containerView = [UIView new];
[scrollView addSubview:containerView];
                            
UIView *v1 = [UIView new];
v1.backgroundColor = [UIColor redColor];
[containerView addSubview:v1];
                            
UIView *v2 = [UIView new];
v2.backgroundColor = [UIColor blueColor];
[containerView addSubview:v2];
                
/*
如上,我想让v1、v2纵向排列,让scrollView可以上下滚动。
*/

// scrollView正常进行约束
[scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self.view);
}];
                      
// 容器视图
[containerView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.width.equalTo(scrollView); // 试了发现这里好像必须要约束一下width
}];
                      
// v1、v2都放在容器里
[v1 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.left.right.equalTo(containerView);
    make.height.equalTo(@400);
}];
[v2 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(v1.mas_bottom);
    make.left.right.equalTo(v1);
    make.height.equalTo(@400);
}];

// 这里需要补刀,来撑起contentSize
[containerView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.bottom.equalTo(v2);
}];