2017-06-20 70 views
1

enter image description here查看改變大小取決於設備的屏幕尺寸,但應該有一個固定的大小

我已創建使用UIView100高度和寬度100與50的半徑將其在4英寸的設置完成橙色圓。 當我移動到4.7英寸或更高時,圓圈變形。 我該怎麼做才能讓圓圈在大型設備上顯示時不會變形?

+1

您是如何創建該圓的?以編程方式(通過代碼)或僅在您的故事板/ xib文件中?是否有你使用的AutoLayout約束? –

+0

我在右側的屬性檢查器中輸入了寬度和高度。然後我編程添加了半徑。是的,我點擊了自動佈局按鈕,這就是我最終的結果。圓圈位於正確的位置,但放置在較大的設備上時會發生彎曲。 – pete800

+0

編輯您的問題以顯示該圓圈UIView上的佈局約束的屏幕截圖。我懷疑你對UIView的底部有一個固定的約束,導致它被拉長,並且你可能會在Xcode控制檯中看到一個「破壞的約束」警告,因爲它不能同時執行底部約束和高度約束。 –

回答

4

所以我猜你使用Xcode的「重置爲建議的約束」選項,如:

reset to suggested constraints

當你這樣做時,Xcode猜測你想要什麼約束。不幸的是,在你的情況下,它猜測錯了。它確實創建了你想要的居中約束,但它確實創建了你想要的寬度和高度約束。相反,它創造的前沿和頂邊的約束,比如:

edge constraints

所以,當您加載場景更大的設備上,以滿足這些約束,自動佈局必須做出視圖大小,像這樣的:

resized

要解決這個問題,你需要刪除邊緣約束:

deleting edge constraints

並添加寬度和高度的限制:

adding width and height constraints

所以你在子視圖這個樣子的最終約束:

final constraints

有了這些限制,當你加載一個場景子視圖將保持居中並且不會更改大小:enter image description here

+0

我已經看到一個問題的最佳答案,保持良好的工作人員。 – pete800

1

我打賭你使用了一個固定的圓角半徑來製作一個圓形的UIView(這對於1:1的寬高比也有一個限制)。只要做到這一點,角落的半徑就可以在視圖的正確尺寸可以知道的地方進行計算。 viewDidLayoutSubviews是一個很好的地方,因爲它會照顧其他大小,如屏幕旋轉。

override func viewDidLayoutSubviews() { 
    self.circleView.layer.cornerRadius = self.circleView.frame.size.width/2 // Assumes width == height because of 1:1 aspect ratio constraint 
} 

或者不要讓您的視圖的大小取決於屏幕的寬度或高度(即除去約束兩側,中心它,並給它一個固定的寬度和高度)

相關問題