2016-03-08 120 views
0

我正在使用創建UIViewControllers及其特定控件的框架。我無法訪問其故事板以手動修改它。有沒有辦法在視圖中添加類似標籤的內容並將其正確放置,即使視圖已配置了自動佈局功能?如何將子視圖(如標籤)添加到已有子視圖的UIViewController的主視圖?

現有的UIViewController有一個視圖,在屏幕底部有一個標籤,一個文本框和一個按鈕。我想在文本框下添加另一個標籤。我如何去做這樣的事情?

我試着使用:

view.insertSubview(label, belowSubview: textField) 

但標籤的左上角結束了,這不是視圖的自動佈局的一部分(即當我改變屏幕尺寸,現有的控制做正確的事情,只有我的標籤迷路了)。

+0

您是否正確設置了要添加的視圖的x:y座標?請注意,上面的插入是關於z順序的,而不是x:y的位置。 – Verticon

回答

0

似乎標籤位置不正確,因爲它沒有任何約束。

你可以試試下面的代碼嗎?

label.translatesAutoresizingMaskIntoConstraints = false 
    let topConstraint = NSLayoutConstraint(item: label, attribute: .Top, relatedBy: .Equal, toItem: textField, attribute: .Top, multiplier: 1.0, constant: 0.0) 
    let leftConstraint = NSLayoutConstraint(item: label, attribute: .Left, relatedBy: .Equal, toItem: textField, attribute: .Left, multiplier: 1.0, constant: 0.0) 
    let bottomConstraint = NSLayoutConstraint(item: label, attribute: .Bottom, relatedBy: .Equal, toItem: textField, attribute: .Bottom, multiplier: 1.0, constant: 0.0) 
    let rightConstraint = NSLayoutConstraint(item: label, attribute: .Right, relatedBy: .Equal, toItem: textField, attribute: .Right, multiplier: 1.0, constant: 0.0) 
    self.view.insertSubview(label, belowSubview: textField) 
    NSLayoutConstraint.activateConstraints([topConstraint, leftConstraint, bottomConstraint, rightConstraint]) 
0

沒有什麼能阻止你添加一個新的視圖來查看層次結構,並使用AutoLayout將它的位置綁定到一個現有的視圖。您當然必須有權訪問該現有視圖。

我們可以假定原始的視圖層次結構不受約束/限制,所以你不應該太擔心你的視圖搞砸了。

你基本上需要限制

  1. 大小僅適用於該視圖的約束,然後
  2. 這是很容易的視圖的位置這將是相對於任何視圖您從現有視圖層次結構中選擇。
0

below in insertSubview(belowSubview:)指的是z軸定位,而不是y軸定位。既然你沒有給標籤定位,它默認爲0,0。這聽起來像你正在使用自動佈局,所以你需要給出適當的限制:

view.addSubview(label) 
view.addConstraint(NSLayoutConstraint(item: label, attribute: .Top, relatedBy: .Equal, toItem: textView, attribute: .Bottom, multiplier: 1.0, constant: 8.0)) 
view.addConstraint(NSLayoutConstraint(item: label, attribute: .Left, relatedBy: .Equal, toItem: textView, attribute: .Left, multiplier: 1.0, constant: 0.0)) 
view.addConstraint(NSLayoutConstraint(item: label, attribute: .Right, relatedBy: .Equal, toItem: textView, attribute: .Right, multiplier: 1.0, constant: 0.0)) 
相關問題