我将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,这种方式将是最有效和代码效率最高的。
提前致谢