2

很可能有十幾個類似的標題做題,而據我所看到的,我已經納入從他們每個人的意見,沒有運氣旋轉。當我將設備從縱向旋轉到橫向時,我想更改背景圖像。但是,在我嘗試的每個實驗中,橫向上的UIImageView保持縱向大小。自動佈局:UIImageView的不與設備方向

我使用自動佈局,在IB配置,像這樣:

autolayout

我視圖層次配置,像這樣:

enter image description here

當我旋轉設備,我想旋轉UIView viewBackground(圖像和所有按鈕)中的所有內容。我相信我可以通過約束管理按鈕移動,但是需要自己旋轉UIImageView image view background。所以,我添加以下代碼:

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    int scaleFactor = self.traitCollection.displayScale; 
    NSString *source = @"drawn"; 

    NSString *orientation; 
    if (size.width > size.height) 
    { 
     orientation = @"Landscape"; 
    } 
    else 
    { 
     orientation = @"Portrait"; 
    } 

    NSString *platform; 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
    { 
     platform = @"iPad"; 
    } 
    else 
    { 
     platform = @"iPhone"; 
    } 

    NSString *filename = [NSString stringWithFormat:@"%@ %@ %@ %.0fx%.0f.png", source, platform, orientation, size.width * scaleFactor, size.height * scaleFactor]; 
// CONFIRMED: we have assembled the correct new image name. 

    viewBackground.frame = CGRectMake(0, 0, size.width * scaleFactor, size.height * scaleFactor); 
    viewBackground.autoresizesSubviews = YES; 
    viewBackground.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
    imageViewBackground.autoresizesSubviews = YES; 
    imageViewBackground.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
    imageViewBackground.image = [UIImage imageNamed:filename]; 
} 

問題:正確的圖像出現在屏幕上,但正如上面提到的,它仍然有畫像的尺寸。我確信圖像會隨着藝術品的顯着不同而變化,元素會水平疊放而不垂直。但是新的圖像在橫向模式下被水平切割。

我試圖把各種野生值到newRect,和他們沒有任何區別。即使我從根本上改變newRect中的原點,圖像也不會移動。所以我目前的理論是,我對視圖大小的改變被忽略/重寫。

問題:我錯過了什麼,可以防止將圖像調整爲橫向模式?有沒有其他汽車尺寸方面我沒有解決?

回答

0

因此,問題原來是傳奇中的另一個變量。在UIImageView上也必須有一個約束,每個邊都是0,並且「約束邊距未選中」。顯然,當我早些時候做了這一步,它實際上並沒有採取。

我必須承認,雖然,我真的不明白是什麼約束是做我的。這顯然使輪換工作,但我不明白爲什麼。因爲這在技術上是我原來問題的答案,所以如果有人能夠解釋這個約束如何實現這個場景,我會很高興地給出答案。

編輯:

在任何情況下,在未來絆倒在這個答案......我現在看到用的UIImageView和UIView的之間的所有0緩衝區設置上述約束的UIImageView的邊緣引腳連接至UIView的邊緣。當設備旋轉時,viewController調整UIView的大小,並且使用這個約束,UIImageView也調整大小。我能夠刪除我的大部分代碼。我需要的唯一代碼是選擇縱向或橫向圖像,並且我能夠移除調整UIView和UIImageView大小的所有內容。

現在通過使用一個約束只是旋轉時,圖像改變大小正常。我只需要代碼來決定是否顯示橫向或縱向背景。(並且我通過將我的圖像存儲在資產目錄中來大大簡化了代碼,因此代碼只是選擇「縱向」或「橫向」的名稱,但圖像的大小是根據設備自動選擇的)。