編輯:給出答案在設備上工作,但要注意它不能在模擬器上。沒有完美的方式來檢測iPad上的設備方向?
當我的iPad啓動時,我會告訴加載標籤,在屏幕的正中。我設置了它的autoresizingMask,以便更新方向。
隨着應用程序啓動時,標籤的文本改變了,所以我想基於其新的長度回到中心的標籤。但是,下面的代碼段沒有正確居中標籤:
- (void) setLabelText:(NSString*)text {
CGSize maximumLabelSize = CGSizeMake(500,20);
CGSize expectedLabelSize = [text sizeWithFont:loadingLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:loadingLabel.lineBreakMode];
loadingLabel.frame = CGRectMake(self.view.frame.size.width/2-expectedLabelSize.width/2,
loadingLabel.frame.origin.y,
expectedLabelSize.width,
loadingLabel.frame.size.height);
loadingLabel.text = text;
}
我也算是檢查[的UIDevice currentDevice]取向],而如果iPad是在橫向模式下,然後我會用自我。 view.frame.size.height設置標籤的xOrigin。
然而,如果該設備是面向上或面向下,(而不是橫向或縱向),則此方法將失敗。我的appDelegate中還有一個lastOrientation變量,它基於設備的最後已知方向記住應用程序是橫向還是縱向,即使面朝上或朝下。但是,在啓動時,這個變量不一定設置。
有一些簡單的解決辦法,我是缺少在這裏,這樣我就可以調整大小和中心我的標籤?
編輯:我試圖檢查基於諮詢UIStatusBarOrientation發佈,但它不工作:
if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft
|| [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) {
NSLog(@"landscape");
width = self.view.frame.size.height;
} else {
NSLog(@"portrait");
}
這始終記錄畫像,至少在啓動時,在模擬器上。
嗯,你是什麼意思「如果該設備是朝上還是朝下,(而不是橫向或縱向),那麼這個方法失敗。」? – ColdLogic 2011-03-02 22:05:18
檢查狀態欄方向是否有幫助? – hotpaw2 2011-03-02 22:05:28
@ColdLogic - iPad可以是人像,風景,或面朝上,或面朝下。當它面朝上時,它不一定是肖像或風景。您可以按照以下方式演示此操作 - 將iPad放在縱向桌面上,然後旋轉它。你可以看到設備不會變成風景,這使得知道如何使事情變得棘手。 – 2011-03-02 22:35:50