簡體   English   中英

視圖框架在運行時不遵守約束

[英]View frames don't respect constraints at runtime

我有一個帶有三個標簽的UITableViewCell 頂部有兩個,底部有一些內容。 我限制了兩個頂部標簽,以使它們距離視圖頂部8pt。 左側標簽距前端8pt,右側標簽距后端8pt。 然后,我將左側標簽設置為比右側標簽最少12pts。

標題限制

在Xcode中查看:標題約束

日期限制

在Xcode中查看:日期約束

當我對其進行評估時,在Xcode中看起來還不錯。 我可以添加一個很長的標題(最左邊的標簽),它可以正確地截斷文本,為日期標簽提供12pt的邊距。

當我在運行時運行應用程序時,似乎沒有應用約束。 標題標簽是設備的整個寬度,日期標簽沒有顯示。

iPhone 5模擬器

它在iPhone 5、5s,6和6 Plus模擬器上執行此操作。 我究竟做錯了什么? 在我的viewDidLoad()方法中,我正在加載包含UITableViewCell的筆尖,然后對其進行注冊。 我還向UINavigationController添加了一個按鈕。

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view, typically from a nib.
    self.navigationItem.leftBarButtonItem = self.editButtonItem()
    if let split = self.splitViewController {
        let controllers = split.viewControllers
        self.detailViewController = controllers[controllers.count-1].topViewController as? DetailViewController
    }

    // Register our additional nibs
    let nibName = UINib(nibName: "StandardNoteCell", bundle: nil)
    tableView.registerNib(nibName, forCellReuseIdentifier: identifier)

    self.newNoteButton = self.createNewRoundButton()
    self.navigationController?.view.addSubview(self.newNoteButton)
}

有什么不對的地方嗎?

問題是您有兩個文本標簽,其中包含有關如何解決兩個文本標簽不能完全適合可用水平空間的情況的含糊信息。

要解決此問題,請將日期標簽的抗壓強度設置為“ 1000(必需)”。 這樣,無論如何日期都將始終可見,其他視圖(在本例中為標題標簽)將通過縮小來解決。

作為實驗,嘗試將兩個標簽的抗壓縮性都設置為1000。這將無法實現,並且您會在控制台中看到錯誤。 因此,請謹慎使用所需的約束-您希望約束盡可能靈活。

XCode不知道UILabel的大小,您可以看到約束在水平軸上都是紅色的。 您的問題有兩種解決方案

  1. 設置標簽的寬度
  2. 設置標簽的擁抱/壓縮

如果設置寬度,標簽將不會根據屏幕尺寸而調整大小。 如果設置了擁抱,它將根據每個UITextField的優先級進行擴展/收縮

內容擁抱 :不想成長

內容壓縮抗性:不想縮小

在此處輸入圖片說明

只是一個瘋狂的猜測,但是您的日期標簽實際上是否設置有任何文本? 因為如果沒有,它將解釋您正在觀察的行為。

暫無
暫無

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

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