布局中的问题

  最近在写一个demo 遇到一个问题 , view是用storyboard来设置的, 约束也是直接拉的线, 但是当view往上滑动的时候 在没有改变约束的情况下 只是改变了子view的center, 并没有起作用, 界面还是原来的界面, 后来发现当view的frame重新改变的时候, 会重新加载layoutsubviews方法, 会重新加载xib/storyboard中的约束, 所以在viewdidload中改变的子view的一些center并没有作用, 然后整理了一下遇到的一些问题的原因如下

通过xib/storyboard创建自定义控件会调用如下方法, 是从xib, storyboard里正在解析且视图全部加载完成之前的时候调用, nsCoder是xib解析器

- (instancetype)initWithCoder:(NSCoder *)aDecoder {

   self = [super initWithCoder: aDecoder];

   if (self) {

   }

    return self;

}


- (void)awakeFromNib{}也是通过xib/Stroyboard创建自定义控件时调用, 不同的是该方法是当所有控件全部加载完成后才调用

layoutSubviews在一下情况下会被调用

1.init初始化不会触发layoutSubviews

2.addSubview会触发layoutSubviews

3.设置view的Frame会触发layoutSubviews, 当然前提是frame的值设置前后发生了变化

4.滚动一个UIScrollview会触发layoutSubviews

5.旋转Screen会触发父UIView上的layoutSubviews事件

6,改变一个UIView大小的时候也会触发UIView上的layoutSubviews事件

7,直接调用setLayoutSubviews

在做一个demo的时候 view的布局是用storyboard设置的 约束是在storyboard中拉的 用的是constraint

但是在做动画的时候  直接改变约束是做不了动画的

需要如下self.view.layoutIfNeeded()方法来帮助实现

@IBAction func switchAction(sender: UISwitch) {
    updateConstraintsForMode(sender.on)
    UIView.animateWithDuration(1.0) { () -> Void in
      self.view.layoutIfNeeded()
    }
 }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值