2014-10-09 17 views
1

我在XCode6中使用autolayoutAutolayout在iOS8中不立即更新幀-Xcode6

我已將以下約束應用於scrollview

enter image description here

我曾經試圖訪問這個滾動型的框架 - viewDidLoad和 - viewWillAppear方法iPhone 4Inchs設備。問題是,滾動視圖的寬度在Log中顯示爲600。但寬度應該是300英寸4英寸的設備,因爲我使用的是autolayout。 似乎autolayout將在一段時間間隔後適用。它顯示在 - viewDidAppear方法中的正確寬度爲300.

有沒有什麼方法可以訪問 - viewDidLoad和 - viewWillAppear方法中的原始幀?

在此先感謝。

+0

這裏沒有問題之前。寬度是指Interface Builder中計算的寬度不在預覽屏幕中。在模擬器或設備上運行它。只要你正確地設置你的約束條件就可以了。 – Fogmeister 2014-10-09 09:40:33

回答

5

自動佈局不會給你「正確的」框架大小,直到佈局通過發生。 viewDidLoad爲時尚早,而且我的頭頂也可能是willAppearviewDidLayoutSubviews是正確的地方。

1

從viewDidLoad和viewWillAppear其顯示與界面生成器的維度相同。如果您的應用程序在scrollView框架上繼續(如果您希望它們在viewDidAppear之前)在呈現之前調用viewController實例view方法。

UIViewController *myVC = [[UIViewController alloc]init]; 
[myVC view] 
[self.navigationController pushViewController:myVC]; 

但是,這指望應用程序的性能。

2

將此代碼放在您的viewDidLoad()

self.view.setNeedsLayout(); 
self.view.layoutIfNeeded(); 

訪問scorllView.frame.size.width

+0

在方法-setNeedsLayout之後觀察scorllView的框架,-layoutIfNeeded在-viewDidLoad中,但它沒有傳遞scorllView的最終框架。 -viewDidLayoutSubviews是我找到的解決方案。但是,在-viewDidLayoutSubviews中獲取原始幀並更新基於此的用戶界面非常煩人。我希望應該有更好的解決方案。 – 2015-06-18 08:48:13

+0

@AshokKumarS我今天嘗試了這兩種方法來獲取UITextField的更新幀。我在viewWillAppear中獲取框架。它提供了正確的框架。 – 2015-06-18 10:10:09

+0

出於某種原因,我沒有得到原始幀(但我測試它在共享擴展而不是在主應用程序)。但沒關係,我使用了-viewDidLayoutSubviews方法。如果我們添加-setNeedsLayout,-layoutIfNeeded在-viewDidLoad中或在-viewWillAppear中明確顯示,它是否會達到性能(即使它有點額外成本)? – 2015-06-18 10:18:53