大家都知道你不能相信UIViewController init/viewDidLoad方法的幀大小;這樣的:UIViewController viewDidLoad不正確的寬度/高度
- (void)viewDidLoad: {
NSLog(@"%d", self.view.frame.size.width);
}
將打印在很多場合錯誤的大小(特別是它在橫向模式下幾乎打破)
這實際上將返回總是糾正結果,因此這是很好的佈局子視圖:
- (void)viewWillAppear: {
NSLog(@"%d", self.view.frame.size.width);
}
問題是viewWillAppears在每次出現視圖時被調用,所以它不適合分配或添加子視圖。所以你最終會在界面中聲明每個視圖,並且最終你會得到我不喜歡的巨大頭文件,因爲大多數項目在初始設置後不需要更多操作。
所以問題一是:有沒有更好的方式來處理子視圖定位?
問題二非常相關,比方說,我有一個包含各種其他子視圖的UIView的子類。我聲明它在我的界面,我分配/初始化它在我的init/viewDidLoad方法。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...
menu = [[SNKSlidingMenu alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
...
}
正如我們已經知道我們現在需要重新定位其在viewWillAppear中,以獲得更準確的讀數
- (void)viewWillAppear:(BOOL)animated{
....
menu.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
....
}
的問題是,當然所有的子視圖需要重新定位爲好。這是通過自動調用的layoutSubviews函數完成的,但是我們得到了同樣的問題:所有子視圖都需要在SNKSlidingMenu類的接口中聲明。是否有解決此問題的方法?
謝謝。
使用自動佈局,還是設置自動調整遮罩? – jrturton