增加和动画导航栏的高度?

时间:2015-01-06 09:30:52

标签: ios animation swift xcode6 uinavigationbar

我将UINavigationBar子类化了,我有一个按钮,可以下拉到下拉菜单中。我希望在导航栏高度增加时动画并将导航栏下方的内容向下推。基本上我想在navigationBar的视图中使用临时表。

到目前为止,我覆盖sizeThatFits()以返回我想要的长度的自定义大小,这由状态枚举确定。当导航栏需要调整大小时,我调用sizeToFit()。

override func sizeThatFits(size: CGSize) -> CGSize {
    let superSize = super.sizeThatFits(size)
    var newSize: CGSize!
    if(state == .Normal) {
        newSize = CGSizeMake(superSize.width, superSize.height + heightIncrease)
    } else if (state == .Menu) {
        newSize = CGSizeMake(superSize.width, superSize.height + tableIncrease)
    }
    return newSize
}

func buttonPressed(){
    if(state == .Normal){
        state = .Menu
        _delegate?.didChangeStateTo(.Menu)
    } else if (state == .Menu){
        state = .Normal
        _delegate?.didChangeStateTo(.Normal)
    }
    UIView.animateWithDuration(0.3, animations: {
        self.sizeToFit()
    })
}

当我为sizeToFit()设置动画时,导航栏会根据动画的大小增加,但栏下方的内容(viewController的视图)会立即跳转到全长。

这是因为sizeThatFits会立即返回新的CGSize。因此,动画仅适用于导航栏本身,并且视图的内容不会跟随动画,而是跳转到目的地。

我尝试避免使用sizeThatFits,但是UINavigationBar不允许您仅通过使用CGRect设置框架来更改条形图的大小。

我知道还有其他方法可以解决这个问题,而无需使用子类化UINavigationBar,但使用我的应用程序的UI,这种方式将是最有效和代码效率最高的。

提前致谢

0 个答案:

没有答案