這裏是一個測試,我只使用自動佈局,我只使用自定義子類的子視圖。我在子類的初始化所有的汽車佈局:
這是一個「登錄按鈕」有沒有框架,但隨後與自動佈局設置:
-(void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
if (self.contentView.loginButton.frame.size.height) {
NSLog(@"viewDidLayoutSubviews");
}
}
-(void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
if (self.contentView.loginButton.frame.size.height) {
NSLog(@"viewWillLayoutSubviews");
}
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (self.contentView.loginButton.frame.size.height) {
NSLog(@"didAppear");
}
}
-(void)viewWillAppear:(BOOL)animated {
if (self.contentView.loginButton.frame.size.height) {
NSLog(@"viewWillAppear");
}
}
-(void)viewDidLoad {
[super viewDidLoad];
if (self.contentView.loginButton.frame.size.height) {
NSLog(@"viewDidLoad");
}
}
這裏的輸出。所以,這意味着,我認爲終於有一個幀時的
2015年8月25日01:28:27.789 [67502:1183631] viewDidLayoutSubviews
2015年8月25日01:28:27.790 [ 67502:1183631] viewWillLayoutSubviews
2015年8月25日01:28:27.790 [67502:1183631] viewDidLayoutSubviews
2015年8月25日01:28:28.007 [67502:1183631] didAppear
這意味着第一次登錄按鈕有一個框架在viewDidLayoutSubviews中,這看起來很奇怪,因爲這是主視圖子視圖的第一遍。 ViewWillAppear中沒有框架,儘管viewcontroller本身的視圖已經設置在登錄按鈕之前。當viewcontroler的視圖被設置時,整個UIView子類的主視圖也被設置,這也發生在登錄按鈕之前。因此,視圖的子視圖是在父視圖設置後設置的。
重點是這樣的:如果你在viewDidLayoutSubviews中放置了imageview信息拉,那麼你就有一個框架可以使用,除非你通過類型轉換將這個UIImageView框架設置爲ViewController的視圖,那麼你將擁有UIImageView的框架在viewDidLoad中設置。祝你好運!
那麼酷和東西,但'UIView'!='UIViewController' – Laszlo