2015-09-02 46 views
0

我有一個UIScrollView在wAny/hAny用戶界面,我將它的所有空間設置爲其超視圖,導致標準大小600x600。Obj-C controller.view.frame獲取實際大小

因爲這是具有多個頁面的應用程序,我需要做一些數學爲滑動到下一個頁面(水平),而且是一個代碼塊,我使用這會導致空格在頁面之間:

CGRect frame = self.scrollView.frame; 
    frame.origin.x = frame.size.width * pageNumber; 
    frame.origin.y = 0; 
    controller.view.frame = frame; 
    [self.scrollView addSubview:controller.view]; 

這裏的問題是,frame.size.width總是返回600而不是視圖的實際大小,導致在視圖之間提到的差距。如果我將frame.origin.x硬編碼爲pageNumber*414(iPhone 6 Plus屏幕寬度),一切都很完美,但這絕對不是實現它的最佳方式。

我也可以只是獲得屏幕寬度,因爲UIScrollView完全填充它,因此會導致相同的值,但我覺得這不是很好的代碼。儘管這對我的應用程序來說肯定足夠了,但我真的很想了解Objective-C中的這種做法。另外,關於iOS 9即將推出的分屏模式,這會導致意想不到的行爲。

那麼還有什麼我可以用來獲得框架的實際大小?

+0

你用什麼方法獲得視圖的大小?系統不會在佈局通過之前設置大小,這發生在'viewDidLoad'和'viewWillAppear:'之後。 –

+0

哦,這是有道理的。在我看來,我做到了這一點,當然它不能真正「知道」現在的價值。那麼你會推薦我把它放在viewDidAppear中嗎?編輯:好吧,剛剛做了,現在啓動應用程序後有一個小小的延遲,會看到我能做些什麼,但我會確定這一點。作爲答案,我會打勾 – user2875404

+0

如果你想在你的視圖控制器中做到這一點,在'viewDidLayoutSubviews'中執行。 –

回答

2

viewWillAppear:中找不到視圖大小,因爲直到該方法返回之後系統纔會佈置視圖。最早可以在視圖控制器中獲得正確的視圖大小是viewDidLayoutSubviews

+0

非常感謝,我現在運行了2次以上的代碼,起初我通過viewWillAppear中的算法得到了我的第一個viewController,然後在viewDidAppear中將它應用於所有視圖。 – user2875404

相關問題