2016-01-08 33 views
0

我遇到了一個問題,其中有一個UIImageView,它使用以下約束跨越屏幕的整個寬度。全寬視圖不包含與父代相同的框架寬度

  • 對齊通往:上海華(等於:-20)
  • 對齊尾隨:上海華(等於:-20)
  • 頂層空間到:頂面佈置指南(等於:0)
  • 看點比例:1:1

圖像呈現屏幕寬度,同時獲得縱橫比(在這種情況下爲正方形)。當我開始嘗試從圖像中創建一個圓圈時,問題隨之而來,我注意到我的UIIMageView的幀沒有合適的值。

因爲我通過RoboVM使用Java,所以您將不得不借助以下代碼不在Objective-C中,但只需很少的努力就可以將代碼轉換爲Objective-C,因爲它非常簡單。

public class MyViewController extends UIViewController { 
    @IBOutlet private UIImageView myImageView; 

    @Override public void viewDidLoad() { 
     System.out.println("Image view width: " + myImageView.getFrame().getWidth()); 
     System.out.println("Superview width: " + this.getView().getFrame().getWidth()); 
    } 
} 

運行與該控制器的應用程序的結果顯示如下:

Image view width: 240.0 
Superview width: 320.0 

當切割圖像的幀寬度一半,並將其應用於所述CALayer#cornerRadius屬性,圖像不會使一個完整的圓圈,但是當使用一半的寬度(這實際上是圖像的大小)時,結果是一個完美的圓。

+0

林不知道,但你不要有給縱橫比限制。僅前導,尾隨,頂部,底部已足夠 –

+0

@ Mr.T添加底部約束會導致圖像在不同設備分辨率之間不成比例地縮放。這已經過測試。 – Hobbyist

+0

哦,好的,謝謝你的信息。 –

回答

2

viewDidLoad中,它剛剛從XIB或故事板加載了您的視圖,尚未調整大小。當調用viewWillAppear時,大小應該是正確的。因此,請嘗試將您的代碼放入viewWillAppear,看看是否有幫助。

+0

這是美麗的,花了我一分鐘找到方法,但它'viewDidAppear'不''viewWillAppear',無論如何..謝謝你堆的解釋。 – Hobbyist

+0

還應該有一個'viewWillAppear'(至少在Objective-C中有,我自己也沒有使用過RoboVM)。它在您的視圖實際顯示之前調用,因此對於執行最後一刻的外觀快速調整非常有用。無論如何,是的,布爾參數是'animated'。作爲標準做法,您還需要在自己的實現之前調用'super.viewWillAppear(animated)'。 –

+0

再次感謝!你是對的,我終於找到了iOS文檔,'viewWillAppear'就在那裏。我想現在我會在顯示視圖後進行所有更改。我懷疑有人會認識到微秒的變化,哦。 – Hobbyist

0

您需要-20保證金的原因是因爲您的超級保單的保證金爲20,並且約束是默認創建爲'相對保證金' - 如果您取消選中,您可以設置'真實'約束 - 在這種情況下爲零,而不是-20

如果選擇在助理編輯的約束,你會看到複選框切換此值

相關問題