我正在使用半透明導航欄和狀態欄,並且我的視圖控制器想要全屏。因此,我的視圖控制器的視圖在導航欄和狀態欄下展開並佔用屏幕的全部大小。在實際旋轉之前確定導航欄的新框架 - iOS
我也有一個標籤,我想直接在導航欄下對齊。因爲我無法在標籤和導航欄之間直接添加約束,所以我在標籤頂部和父視圖頂部之間添加了約束條件。我將contstraint的常量設置爲等於狀態欄的高度+導航欄的高度。
我的問題是在縱向和橫向之間旋轉,因爲導航欄的高度發生變化,我需要我的標籤也很好地旋轉,所以我需要知道導航欄的新高度willRotateToInterfaceOrientation:
方法。
我使用此方法確保當視圖控制器從縱向或橫向導航到時,標籤位於正確的位置。它工作正常。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Get Y origin for Label
CGFloat navBarY = self.navigationController.navigationBar.frame.origin.y;
CGFloat navBarHeight = self.navigationController.navigationBar.frame.size.height;
CGFloat labelY = navBarY + navBarHeight;
// Set vertical space constraint for Label
self.labelConstraint.constant = labelY;
}
當導航欄高度從44px變爲32px時,我使用此方法重新定位標籤的方向。問題是,我需要獲得導航欄在旋轉之後的實際發生旋轉之前的NEW高度。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
// Get Y origin for Label
CGFloat navBarY = self.navigationController.navigationBar.frame.origin.y;
CGFloat navBarHeight = self.navigationController.navigationBar.frame.size.height;
CGFloat labelY = navBarY + navBarHeight;
// This obviously returns the the current Y origin for label before the rotation
// Which isn't very useful.
NSLog(@"labelY: %f", labelY);
// This code produces the desired effect, but obviously I want to avoid
// hard-coding the values.
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
self.labelConstraint.constant = 20 + 32;
} else {
self.labelConstraint.constant = 20 + 44;
}
}
爲了好玩,我試圖設置Y原點爲didRotateFromInterfaceOrientation:
旋轉後的標籤,但預計它的不順暢和標籤卡入到位轉動完成後。
預先感謝您的幫助!
您是否找到了解決此問題的答案? –
我遇到了同樣的問題...任何解決方案? –