UIScrollView中嵌入一个UITableView,使用Masonry来写Autolayout的demo

原创 2015年07月06日 18:02:03

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">只有一个viewcontroller,所以直接贴上代码就好</span>


//
//  MainViewController.m
//  scroll_embed_table_text
//
//  Created by 马龙 on 15/7/6.
//  Copyright (c) 2015年 马龙. All rights reserved.
//

#import "MainViewController.h"
#import "masonry.h"

@interface MainViewController ()
@property (strong, nonatomic) UIScrollView *scrollView;
@property (strong, nonatomic) UITableView *tableView;

@property(strong, nonatomic) UIView* subview;
@property(strong, nonatomic) UIView* subview2;
@end

NSInteger subview_height = 50;

@implementation MainViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.scrollView = [[UIScrollView alloc] init];
    [self.view addSubview:self.scrollView];
    [self.scrollView setBackgroundColor:[UIColor blackColor]];
    
    self.subview = [[UIView alloc] init];
    self.subview.backgroundColor = [UIColor greenColor];
    [self.scrollView addSubview:self.subview];
    
    self.subview2 = [[UIView alloc] init];
    self.subview2.backgroundColor = [UIColor blueColor];
    [self.scrollView addSubview:self.subview2];
    
    self.tableView = [[UITableView alloc] init];
    [self.scrollView addSubview:self.tableView];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    
    self.automaticallyAdjustsScrollViewInsets = FALSE;
    
    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.top.equalTo(self.view);
        make.width.equalTo(self.view);
        make.height.equalTo(self.view);
    }];
    
    [self.subview mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.top.equalTo(self.scrollView);
        make.width.equalTo(self.scrollView);
        make.height.equalTo(@250);
    }];
    
    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.scrollView);
        make.width.equalTo(self.scrollView);
        make.top.equalTo(self.subview.mas_bottom);
        make.height.equalTo(@400);
    }];
    
    [self.subview2 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.scrollView);
        make.top.equalTo(self.tableView.mas_bottom);
        make.width.equalTo(self.scrollView);
        make.height.equalTo(@250);
        make.bottom.equalTo( self.scrollView.mas_bottom);
    }];
    

      // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(void) viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
}


#pragma mark - delegat
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 20;
}

-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString* strID = @"ID";
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:strID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:strID];
    }
    cell.textLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row];
    return cell;
}
/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end


比较重要是两点:

1、self.subView2的约束里有一行 

make.bottom.equalTo( self.scrollView.mas_bottom);  这行代码确定了scrollView的ContentSize

2、demo中tableview的高度是确定的。如果高度不确定,那么subview2的高度及位置应该是确定的。否则tableview的高度不能正确的被计算。

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS开发:UISCrollView与UITableView嵌套使用终极解决方案

IOS开发~UISCrollView与UITableView嵌套使用终极解决方案  问题由来:项目需要做类似网易新闻的那种UIScrollView上放多个UITableView的效果,其中UITa...
  • Kevindongkun
  • Kevindongkun
  • 2015年09月16日 22:24
  • 8298

IOS开发~UISCrollView与UITableView嵌套使用终极解决方案

http://blog.csdn.net/lizhongfu2013/article/details/12063413 问题由来:项目需要做类似网易新闻的那种UIScrollView上放多个...
  • u011303663
  • u011303663
  • 2016年01月08日 15:00
  • 4253

iOS开发:UISCrollView与UITableView嵌套使用终极解决方案

IOS开发~UISCrollView与UITableView嵌套使用终极解决方案  问题由来:项目需要做类似网易新闻的那种UIScrollView上放多个UITableView的效果,其中UITa...
  • Kevindongkun
  • Kevindongkun
  • 2015年09月16日 22:24
  • 8298

IOS开发~UISCrollView与UITableView嵌套使用终极解决方案

http://blog.csdn.net/lizhongfu2013/article/details/12063413 问题由来:项目需要做类似网易新闻的那种UIScrollView上放多个...
  • u011303663
  • u011303663
  • 2016年01月08日 15:00
  • 4253

IOS开发~UISCrollView与UITableView嵌套使用终极解决方案

问题由来:项目需要做类似网易新闻的那种UIScrollView上放多个UITableView的效果,其中UITableView还要有下拉刷新效果。 一开始的思路,也是最直观的思路就是一个UIScrol...
  • zfpp25_
  • zfpp25_
  • 2013年09月26日 18:15
  • 20944

Fastlib库来写一个 记账本demo

Fastlib库是一个多功能的android第三方库。为了能让使用者尽量使用所有的功能,我写一个记帐本的demo来让大家提升对Fastlib使用能力 看之前请先预习一下 数据库功能Fast...
  • sb602687446
  • sb602687446
  • 2017年08月06日 15:34
  • 104

用HashMap写的一个小Demo用来写游戏排名的一种方法

  • 2014年08月26日 19:36
  • 1018KB
  • 下载

Masonry介绍与使用实践(快速上手Autolayout)

  • 2015年01月05日 15:18
  • 159KB
  • 下载

Cell使用AutoLayout及UISCrollView自动布局

  • 2016年04月27日 12:39
  • 79KB
  • 下载

在autolayout下使用uiscrollview

  • 2014年05月16日 17:28
  • 34KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UIScrollView中嵌入一个UITableView,使用Masonry来写Autolayout的demo
举报原因:
原因补充:

(最多只允许输入30个字)