2014-12-09 82 views
-1

我想以編程方式移動self.view的y位置(頂部約束)。但我沒能發現我可以改變運行時間如何在自動佈局中更改self.view約束?

self.view.frame = CGRectMake(0, -59, self.view.frame,size.width, self.view.frame,size.height); 

像這樣的事情,但有約束的任何約束?

+0

你去哪裏卡住了,說實話?你是否試圖改變你的約束「常量」值?我在這裏沒有看到任何嘗試...... – holex 2014-12-09 12:54:53

+0

我在中心有2個文本框。所以我想在鍵盤升起時向上移動。所以我想移動self.view了。改變約束我需要頂部約束對象,但我怎麼能找到self.view約束 – 2014-12-09 13:00:49

回答

1

取一個新的UIView並在新的UIView中添加你的textfield。在主視圖中添加新的UIViewself.view)。爲新的UIView添加Constraint

現在你可以改變新UIViewconstraint編程,

IBOutlet NSLayoutConstraint * topConstraint; 

NSArray * arrConstarint=self.view.constraints; 
    for (NSLayoutConstraint * constraint in arrConstarint) 
    { 
     if (constraint.firstAttribute==NSLayoutAttributeTop) { 
      // if problem then add constraint.firstItem or constraint.secondAttribute etc 
      constraint.constant=-59; 
     } 
    } 
1

你不應該移動視圖控制器的視圖。設置視圖的框架是超視圖的責任。對於視圖控制器來說,這意味着定位self.view是周圍視圖控制器的責任(例如UINavigationController)。

而是在嘗試移動內容以便鍵盤不隱藏任何內容時,應該將視圖中的內容移動到正確的位置。但是,請記住,從iOS8和自定義鍵盤開始,鍵盤幾乎可以有任何高度,因此您無法保證所有子視圖都可以在屏幕上看到。大多數情況下 - 可能會有例外情況 - 在UIScrollView內移動文本字段並更改滾動視圖的contentOffset以便當前第一響應者(當前正在編輯的文本字段)可見時更好。