首页 > ios控件动态布局问题。

ios控件动态布局问题。

控件动态隐藏和显示问题
大家都知道,控件的隐藏显示用xxx.hiden = YES或NO
那么在一个页面中我想把中间一部分控件隐藏掉,是可以的,
然而隐藏掉的控件出现的问题是下面一些控件不会自动像上移? 需要我们自己去改变frame,有什么好的思路吗?


高度设置为0即可


题主的思路我也想过,其实是一个布局思想的问题,不过因为对于iOS本身的布局渲染机制没有往深入理解,所以姑且想一下把

与web布局的对比。

如果将web布局全部更新为“绝对布局”,那么布局与iOS的布局基本上是一致的。

position: absolute;

但是web布局中,主要以相对布局为主,绝对布局为辅,所以,布局起来很随意和简单,流式布局的优点在于你只需要考虑到上一个元素的位置,然后不论是“块”还是“行”,只要不特殊处理,都不会出现重合或者是溢出等。

然而iOS,本身的“绝对布局”,如果你是纯代码的方式编写界面,那么可能要求的几何和平面想像能力要强一些,然后经过一系列的计算得到位置frame或者bounds,然后绑定位置。

所以我认为,如果能够将web的流式布局思想加入到iOS布局中来的话,那么纯代码的布局应该会相对简单一些,当然,我没有过其他客户端的变成经验,所以不知道流式布局的使用度有多大。

就事论事

就题主说的问题而说的话,我想说明一点方法,但是可能比较拙劣。想到其他的再补充。我之前也遇到过类似的问题,就是按照上面的解决。当然这是一种比较笨重的方法。

基本思路:利用[Masonry][1]作为布局框架,纯代码布局,做依赖。

例子

三个view,上中下分别为viewA,viewB,viewC,实现点击viewB后viewB消失,同时viewC与viewA相连

基础代码不写,只写构造试图,和点击方法

//构造试图

    UIView *ws = self.view;

    UIView *viewA = [UIView new];
    viewA.backgroundColor = [UIColor blackColor];
    [self.view addSubview:viewA];
    [viewA mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(ws.view);
        make.top.left.right.equalTo(ws);
        make.height.mas_equalTo(@50);
    }];


    UIView *viewB = [UIView new];
    viewB.backgroundColor = [UIColor blackColor];
    [self.view addSubview:viewB];
    [viewB mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(ws.view);
        make.left.right.equalTo(ws);
        make.top.equalTo(viewA.mas_bottom);//添加相对与viewA的底部约束
        make.height.mas_equalTo(@50);
    }];

    UIView *viewC = [UIView new];
    viewC.backgroundColor = [UIColor blackColor];
    [self.view addSubview:viewC];
    [viewC mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(ws.view);
        make.left.right.equalTo(ws);
        make.top.equalTo(viewB.mas_bottom);//添加相对与viewB的底部约束
        make.height.mas_equalTo(@50);
    }];
//添加ViewB点击后的事件,假设viewB为全局属性

- (void)touchViewBHidden
{
  self.viewB.hidden = YES;

  //这里只需要更新高度就可以实现viewC与viewA相连
  [self.viewB mas_makeConstraints:^(MASConstraintMaker *make) {

        make.height.mas_equalTo(@0);//这里变成高度为0
    }];

}

写在后面

我喜欢流式布局

【热门文章】
【热门文章】