2017-05-18 44 views
0

背景:編程改變故事板視圖的高度

我在故事板(稱爲statusView),其具有的30的高度,和四個限制正常UIView釘到前置,頂部空間超級景觀,底部空間到它下面的視圖。

問題:

我的目標是改變的statusView高度,包括當用戶執行的動作的動畫幀的變化。因此,statusView可以與0一樣短或與100一樣高。

我的期望是,由於statusView限於superview及其最近的鄰居,它應該會在我改變它的高度時自動「推」下面的視圖。

只是爲了測試,在viewDidAppear,我撥打以下:

self.statusView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 100.0) 
self.statusView.setNeedsDisplay() 

問題:然而,30的高度保持爲statusView,儘管我將其設置爲0

編輯:發佈Storyboard設置

這是statusView設置: enter image description here

回答

1

如果您正在使用自動佈局,並要設置在層次結構視圖中的一個明確的高度,你應該使用自動佈局來做到這一點。我假設在界面構建器中設置了高度約束。

爲約束創建一個IBOutlet,並在界面構建器中將其鏈接起來。

@IBOutlet weak var statusViewHeightConstraint: NSLayoutConstraint! 

然後,假設這只是一個尺寸限制具有恆定的高度,只是改變它在你的代碼:

statusViewHeightConstraint.constant = 100 

您可以通過動畫包裝佈局呼叫動畫這種變化請在修改約束後立即阻止。像這樣的:

UIView.animateKeyframes(withDuration: 0.2, delay: 0.0, options: [.beginFromCurrentState, .calculationModeCubic], animations: { 
    self.view.layoutIfNeeded() 
}, completion: nil) 
+0

這是一個好主意 - 改變高度限制。我可以通過約束來動畫變化高度嗎? – daspianist

+0

用動畫代碼編輯我的答案 – Dima

+0

太棒了。非常感謝! – daspianist