用Maonry如何实现UIScrollView
一,使用UIScrollView 与其他View 布局不同的地方在于,
ScrollView的高度/宽度不固定;
ScrollView的高度和宽度由其内容决定(即 Scroll View 的 contentSize 所决定);
内容的大小不能依赖于Scrollview;
二,网上使用Xib/StoryBoard的做法太多,自行百度就是。
如何使用Masonry实现UIScrollView,参考见:
Masonry介绍与使用实践:快速上手Autolayout
做法:1,新建一个container View, 其他子View都添加到container View上。
_bottomChannelsView = [[UIScrollView alloc]init];
[_bottomChannelsView setScrollEnabled:YES];
//_bottomChannelsView.scrollEnabled = YES;
[self addSubview:_bottomChannelsView]; container = [UIView new];
[_bottomChannelsView addSubview:container];
2,设置布局方法:
需要注意的是,container View的subView的constraints都必须依赖container,依赖scrollview和其他的view都不能达到想要的效果。
-(void)setBottomLayout
{
if (self.bottomView.count<=) {
return;
} WS(ws); [_bottomChannelsView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.left.and.right.and.bottom.mas_equalTo(ws);
make.top.mas_equalTo(_topChannelsView.mas_bottom);
// make.left.and.right.mas_equalTo(ws);
}]; [container mas_remakeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(_bottomChannelsView);
make.width.equalTo(_bottomChannelsView);
}]; [moreText mas_remakeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(container);
make.left.equalTo(container).with.offset();
make.top.equalTo(container.mas_top).with.offset();
make.height.mas_equalTo(@);
}]; //排底部channelItem CGFloat itemWidth =((kScreenWidth - )-*/)/; ChannelListItem *firstItem = (ChannelListItem *)self.bottomView[];
firstItem.hidden = NO;
[firstItem mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(moreText.mas_bottom).with.offset();
make.left.equalTo(container.mas_left).with.offset();
make.width.equalTo(@(itemWidth));
make.height.equalTo(@);
//第一排离superview是15 vpadding
}]; ChannelListItem *lastItem = firstItem;
ChannelListItem *item ;
for (int i = ; i<self.bottomView.count; i++) {
item = (ChannelListItem *)self.bottomView[i]; [item mas_remakeConstraints:^(MASConstraintMaker *make) {
make.height.and.width.equalTo(firstItem); }]; if (i%==) {
[item mas_updateConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(container.mas_left).offset(); }]; firstItem = item;
}else
{
[item mas_updateConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(lastItem.mas_right).offset(); //约束冲突
make.top.mas_equalTo(firstItem);
}]; }
if(i<)
{
[item mas_updateConstraints:^(MASConstraintMaker *make) {
// make.top.equalTo(_topChannelsView.mas_top).offset(15); //第一排离superview是15 vpadding
make.top.equalTo(firstItem);
}];
}else if(i%==) {
[item mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(lastItem.mas_bottom).offset(); //非第一排
// make.top.equalTo(firstItem.mas_top);
}]; }
else {
[item mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(firstItem);
}];
}
lastItem = item;
} [container mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(item.mas_bottom).with.offset(20);
}]; }
效果差不多是这样:
不尽完美,欢迎指正。感谢!
用Maonry如何实现UIScrollView的更多相关文章
- 【原】Masonry+UIScrollView的使用注意事项
[原]Masonry+UIScrollView的使用注意事项 本文转载请注明出处 —— polobymulberry-博客园 1.问题描述 我想实现的使用在一个UIScrollView依次添加三个UI ...
- UIScrollView的封装
UIScrollView的封装 效果 特点 1.用法简单,尺寸大小,随意设置位置 2.可以有多个数据源的数据,可以定制不通的界面(如同上图,一个有文字,一个没有文字) 3.能够实现点击事件 用法 1. ...
- UI第十七节——UIScrollView
// 实例化一个ScrollView UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen main ...
- UI控件(UIScrollView)
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //创建一个scrollview UIScrollV ...
- UIScrollView的delaysContentTouches与canCencelContentTouches属性
UIScrollView有一个BOOL类型的tracking属性,用来返回用户是否已经触及内容并打算开始滚动,我们从这个属性开始探究UIScrollView的工作原理: 当手指触摸到UIScrollV ...
- iOS 视图:重绘与UIScrollView(内容根据iOS编程编写)
我们继续之前的 Hypnosister 应用,当用户开始触摸的时候,圆形的颜色会改变. 首先,在 JXHypnosisView 头文件中声明一个属性,用来表示圆形的颜色. #import " ...
- 学习笔记之-------UIScrollView 基本用法 代理使用
//contentSize.contentInset和contentOffset 是 scrollView三个基本的属性. // 滚动 self.ScrollView.contentSize =sel ...
- iOS UIScrollView的使用
一.为什么要用UIScrollView? 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容普通的UIVie ...
- iOS之UIScrollView循环滚动
#import "ViewController.h" #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #d ...
随机推荐
- 在Visual Studio 2013/2015上使用C#开发Android/IOS安装包和操作步骤
Xamarin 配置手册和离线包下载 http://pan.baidu.com/s/1eQ3qw8a 具体操作: 安装前提条件 1. 安装Visual Studio 2013,安装过程省略,我这里安装 ...
- sql 数据库查看主外键关联
SELECT 主键列ID=b.rkey ,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid) ,外键表ID=b. ...
- python函数传参是传值还是传引用?
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- 《zw版·Halcon-delphi系列原创教程》 邮票艺术品自动分类脚本
<zw版·Halcon-delphi系列原创教程> 邮票艺术品自动分类脚本 邮票艺术品自动分类脚本,是个综合应用,有不同尺寸图像的自动识别.区域分割 还有作品附近文字的自动分割 此类项目, ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON Component Histogram
zw版[转发·台湾nvp系列Delphi例程]HALCON Component Histogram unit Unit1;interfaceuses Windows, Messages, SysUti ...
- Hadoop实战3:MapReduce编程-WordCount统计单词个数-eclipse-java-ubuntu环境
之前习惯用hadoop streaming环境编写python程序,下面总结编辑java的eclipse环境配置总结,及一个WordCount例子运行. 一 下载eclipse安装包及hadoop插件 ...
- web跨页弹窗选值
最近在项目中看到这样一种效果——点击当前网页文本框,然后弹出一个缩小的网页,并在网页里选择或填写数据,然后又返回当前网页,小网页关闭.感觉非常不错,其实在以前网上也看见过,只是当时没有留心.今天抽时间 ...
- Web Token JWT
基于Token的WEB后台认证机制 JSON Web Token in ASP.NET Web API 2 using Owin 翻译:Token Authentication in ASP.NET ...
- NSHashtable and NSMaptable
本文转自Nidom的博客,原文:<NSHashtable & NSMaptable> NSSet, NSDictionary, NSArray是Foundation框架关于集合 ...
- HDU 4417:Super Mario(主席树)
http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意是:给出n个数和q个询问,每个询问有一个l,r,h,问在[l,r]这个区间里面有多少个数是小于等于h的 ...