2012-02-08 39 views
0
- (BOOL) shouldAutorotateToInterfaceOrientation 
      : (UIInterfaceOrientation)interfaceOrientation; 

上述方法可以按預期在讓發生旋轉的條款。但我很難在保持高寬比的情況下進行UIView拉伸。界面取向,拉伸和寬高比

會發生什麼事是UIView的水平延伸,同時改變爲橫向模式,但它不會垂直拉伸不管我做什麼。事實上,它的高度在橫向模式下縮小很多。

試過在IB和代碼,但沒有用下面的設置。

  • 在IB,試圖 「看點飛度」, 「縱橫填」 和自動調整大小盒
  • 在代碼中,試圖 「autosizingMask」 和 「setContentMode」

希望有人可以幫助。 ..

或請留下一張紙條,如果你做了/遇到類似的東西。

編輯:

我想我發現從另一個SO問題的解決方案。發生了什麼事是我的代碼與IB的AutoResizing功能的影響糾纏在一起。這個問題的鏈接可以在我自己的答案中找到。

+0

這已經涵蓋以下鏈接 - http://stackoverflow.com/questions/2325795/webview-resizes-automatically-to-portrait-and-landscape-view-in-iphone – iOSPawan 2012-02-08 09:01:28

+0

感謝您的評論。它可能不適用於我的情況,因爲我的UIView是在IB中創建的。但我會試試看... – Stanley 2012-02-08 09:07:01

+0

不幸的是,問題2325765的解決方案並沒有爲我工作。當應用autoresizingMask時,圖像會縮小得更多。 – Stanley 2012-02-08 09:19:38

回答

3

首先,內容模式(與setContentMode:或通過改變視圖在IB模式設置)是不會對你有用,因爲它控制是什麼反應發生在一個視圖的內容一個改變大小 - 它不能控制實際的大小變化。更重要的是,除非將其設置爲UIViewContentModeRedraw,否則內容不會重新繪製,而只是移位或拉伸,這通常不是您想要的。

另一方面,設置自動調整大小(或使用IB中的自動調整大小框)並不能達到您想要的效果。 UIViewAutoresizingFlexibleWidth將根據超視圖尺寸的che變化成比例地改變視圖的寬度(使用UIViewAutoresizingFlexibleLeftMargin和/或UIViewAutoresizingFlexibleLeftMargin此外還將控制屏幕兩側的距離是否保持不變)。但是自動調整面具並沒有給你一種方法來改變寬度的變化:根據改變寬度:你可以根據超級視圖的高度和/或堅持頂部/底部來改變高度。

所以你必須要管理自己的調整,編程,在willRotateToInterfaceOrientation:duration:。喜歡的東西:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    CGRect rectToResizeTo; 

    if ((toInterfaceOrientation == UIInterfaceOrientationPortrait) || (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)) { 
     rectToResizeTo = CGRectMake(x1, y1, width1, height1); 
    } else { 
     rectToResizeTo = CGRectMake(x2, y2, width2, height2); 
    } 
    [UIView animateWithDuration:duration animations:^{ 
     self.viewToResize.frame = rectToResizeTo; 
    }]; 
} 
+0

感謝您的詳細解答。會試試看,今天或明天,因爲我此刻的時間不多了。 – Stanley 2012-02-08 11:08:09

+0

我認爲你的解決方案應該可以工作。但是目前我使用的是部分依賴於IB的版本,因爲它對我現有的代碼只需要少許更改。 – Stanley 2012-02-09 09:31:37