分享

ios控件动态布局问题。

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

    1 个回答

    0
    ismoker 946 4月5日 回答

    题主的思路我也想过,其实是一个布局思想的问题,不过因为对于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
        }];
    
    }
    
    

    写在后面

    我喜欢流式布局

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多