簡體   English   中英

UIImageView在不同設備上保留情節提要“預覽屏幕邊界”-框架不會根據屏幕大小進行更新

[英]UIImageView retains the Storyboard “preview screen bounds” on different devices - Frame not updating based on screen size

當我在模擬器中運行我的應用程序時,我的情節提要預覽選擇手機的高度和重量仍然可以得到。

不應該選擇哪種模擬器?

例如:情節提要預覽選擇iPhoneSE,然后選擇圖像視圖

體重= 96

高度= 92

故事板預覽,選擇iPhone8,然后選擇圖像視圖

重量= 112.5

高度= 108.5

但是當我進行情節提要預覽時,無論選擇iPhone 8,iPhoneX還是選擇iPhoneSE和模擬器,...

體重= 96

高度= 92

為什么?

當我選擇不同的故事板預覽時,最奇怪的是同一台模擬器,我得到了不同的大小...

print(self.img.frame.height)
print(self.img.frame.width)

如果添加了leading, trailing, top and bottom約束,則將在不同屏幕尺寸上獲得不同的imageView尺寸;如果希望centerX在每個屏幕上均具有固定尺寸,則可以使用centerXcenterY約束進行定位和添加恆定的寬度和高度

例子1

寬度和高度可調的圖像

例子2

添加imageView的寬度和高度

在此處輸入圖片說明

添加centerX和centerY約束

在此處輸入圖片說明

說明

Example 1圖像的寬度和高度將是動態的,而在Example 2 ,無論使用哪個設備顯示,imageView的高度和寬度都將相同

我遇到了完全相同的問題,在上面的描述中我認為它並沒有很好地解決。 要重新創建它,請執行以下步驟:

設定:

1)在Xcode中啟動一個新的“單視圖應用程序”。 我目前正在使用Xcode 10.2.1

2)進入情節提要,並添加帶有某種backgroundColor的UIView對象,使其可見

3)給此新視圖一些自動約束,例如前導,尾隨,centerY和縱橫比為1:1。 只要確保不給它固定的高度或寬度即可。

4)在ViewController.swift ,為此UIView添加一個IBOutlet變量(例如“ myView”)並連接它,以便於引用。

5)在viewDidLoad() ,添加打印語句以達到以下效果:

print("Bounds of myView: \(myView.bounds)")

測試問題:

現在,返回Interface Builder,將預覽或底部的“查看為”設置為“ iPhone SE”之類的內容。 然后,在頂部選擇模擬器的位置,還選擇“ iPhone SE”。 現在運行該應用程序。

在控制台中,您將看到帶有視圖邊界的打印語句,並且所有內容在視覺上看起來都很好。

現在,將Interface Builder的預覽“查看方式”選項更改為類似“ iPhone 8”的名稱, 但將模擬器選項保留在iPhone SE上,再次在“ iPhone SE”模擬器中運行該應用程序。

就像以前一樣,由於自動布局,外觀上一切正常。 但是,控制台中打印的邊界信息是不同的 而是與“ iPhone 8”或在Interface Builder中選擇用於預覽的任何設備匹配。

舉一個更明顯的例子,為Interface Builder選擇類似iPad Pro的東西,然后在iPhone SE模擬器上再次運行它。 再次從視覺上看一切正常,但控制台中的bounds信息已消失。 它與接口預覽綁定,而不與要測試的設備綁定。

當您編寫在自動布局約束下使用對象的邊界信息的代碼時,這些約束沒有固定的寬度和高度,因此會出現問題。

解:

ViewController.swift ,在viewDidLoad()方法之后添加以下內容

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    print("Bounds of myView in viewDidLayoutSubviews: \(myView.bounds)")
  }

現在,無論我們在Interface Builder中使用哪種預覽選項,模擬器都將在生命周期中的這一點記錄正確的邊界信息。

因此,對於使用代碼中的boundsframe屬性的任何項目(例如本示例中的視圖),都應在viewDidLayoutSubviews()方法中放置任何限制邊界的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM