2015-05-12 34 views
1

我一直在Google上搜索,似乎無法找到我有問題的答案。根據設備垂直尺寸自動設置UIView垂直尺寸(包括自動佈局更改)

我正在寫一個應用程序,並希望子UIView的垂直空間,以保持設備的高度或父設備的旋轉,而不管方向如何,並且不提前對值進行硬編碼。

我的佈局結構爲:

ViewContainer 
    UIView 
    UIScrollView 
     UIView (Content View) 

具體來說,我想有內容查看初始設置是設備/取向的原生高度的垂直空間,它正在運行在設備旋轉時,我希望垂直空間更改爲新的垂直高度。 UIScrollView將僅用於水平平移。

我將使用Quartz在視圖中繪製。我是否通過intrinsicContentSize設置初始高度?如果是這樣,我該如何查詢父視圖?

我試過在內容視圖中使用self.superview,但這不起作用。如何檢測到發生了變化,發生變化後,如何獲得新的Y分辨率,然後應用它?另外我不想禁用自動佈局,如果我不必。

這是一個視覺的我想要的東西,如果我還沒有做出明確表態: https://www.evernote.com/l/AAI3VFkKBARPlYPsoURJOwAmIiGielF5p-w

+0

我會根據'UIScreen.mainScreen()。bounds.size.height'(或橫幅,如果你在橫向)的大小。然後使用'UIDeviceOrientationIsLandscape()'宏。還有其他一些人也喜歡它。看看他們。 –

+0

我已經嘗試修改TN2154中的Pure AutoLayout代碼,但是我無法檢測到更改(並且我不確定這是否是正確的方法來首先解決問題)。我可以通過intrinsicContentSize強制大小,但不知道如何正確檢測大小,或者發生旋轉的時間。我一直在看viewWillTransitionToSize,但不知道這是正確的方法。 – Tornado

+0

要獲得方向更改的通知,您可以訂閱通知。不知道這是否適合您的用例,但這裏是代碼片段[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged :) name:UIDeviceOrientationDidChangeNotification object:nil];'然後確保您有一個名爲'orientationChanged '接受'NSNotification'參數 –

回答

0

我有同樣的看法層次的應用程序。

你想要的是純粹的AutoLayout可以實現的,具有以下約束條件。只有垂直約束這裏包括:

view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView]|", options: .allZeros, metrics: nil, views: ["scrollView" : scrollView])) 

scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: .Height, relatedBy: .Equal, toItem: scrollView, attribute: .Height, multiplier: 1.0, constant: 0.0)) 
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[contentView]|", options: .allZeros, metrics: nil, views: ["contentView" : contentView])) 

由於內容查看的高度總是正確的,不知道你是否仍然希望得到通知的方向變化。

+0

太棒了!這工作。我想要一個純粹的AutoLayout解決方案,這個伎倆!謝謝! – Tornado

+0

你會接受這個答案嗎? –

+0

是的。對不起,這是我在這裏問的第一個問題,所以我在這方面有點不好意思。我只需要檢查綠色選中標記? – Tornado