2014-10-28 175 views
2

我有一個UITextField,它使用Xcode 6s自動佈局接口,我已設置爲400點的寬度。這在大屏幕設備上看起來很好,但在iPhone 5s上,這些框從包含視圖中消失。什麼是正確的方法來解決這個問題?Xcode 6自動佈局靈活寬度

有沒有一種方法來設置一個約束,如果屏幕比這個大,將使UITextFields的寬度爲400點,或者只是填充容器視圖如果不是,而不是在視圖外部溢出,或者我應該使用大小用於設置UITextField在緊湊視圖上與其父視圖具有相同寬度的類。

回答

2

而不是在UITextField上設置寬度約束,將水平空間約束添加到它的左側和右側。這樣,UITextField將自動調整屏幕大小。

+0

我唯一的問題是,像iPad這樣的大屏幕設備我不希望文本視圖佔用整個屏幕,因爲它看起來很傻。 – 2014-10-28 17:51:30

+0

蘋果推薦的方法是爲iphone和ipad製作不同的storyboard/xibs。他們的代碼將被完全共享。 – 2014-10-28 17:52:44

+0

@KrisJurgowski看起來Apple似乎希望將每個尺寸類別的Storyboard文件與不同的實現結合起來。我不確定我是否還在意這種工具/方法,但似乎是未來的潮流。不過,我希望他們能夠更輕鬆地區分設備/屏幕。目前,將iPhone與iPad區分開來相當容易,但將iPhone 4S與iPhone 6 Plus區分開來會造成混淆(至少在肖像模式下)。現在,我與您分開介紹Storyboard,但我認爲這不會被支持的時間更長。 – mbm29414 2014-10-28 17:59:23

0

就像Kris說的那樣,設置水平空間約束是開始處理這個問題的好方法。

在回答你關於不想常量「利潤」的評論,你可以做到以下幾點:

  1. 建立橫向空間限制在Interface Builder。
  2. 在您的班級中創建IBOutlet s類型NSLayoutConstraint(無論是.h還是.m;無關緊要)。
  3. IBOutlet連接到各自的NSLayoutConstraint s。
  4. 在其中一種視圖生命週期方法(viewDidLoad/viewWillAppear:)中,將約束設置爲所需的值。

這聽起來像你主要是想防止跨越整個屏幕在iPad領域,所以你可以做這樣的事情(假設NSLayoutConstraint s的名爲「textFieldLeft」和「textFieldRight」名爲UITextField「文本字段「):

- (void)viewDidLoad { 
    if (UI_USER_INTERFACE_IDIOM == UIUserInterfaceIdiomPad) { 
     self.textFieldLeft.constant = 50.0f; 
     self.textFieldRight.constant = 50.0f; 
     [self.textField layoutIfNeeded]; 
    } 
}