打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ios控件动态布局问题。
  • 控件动态隐藏和显示问题
    大家都知道,控件的隐藏显示用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    }];}

    写在后面

    我喜欢流式布局

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
iOS触摸事件处理
【Android】你可能还不知道的elevation、以及Z值等
IOS自适应前段库
iOS Masonry使用案例讲解 | 发光的我
iOS界面布局之四
iOS布局和屏幕适配的一点总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服