2017-02-09 26 views
1

在視圖控制器我已經創建uitextfield編程。對於這個textField,我想要有以下約束條件:對於iphone設備,頂部90像素,高度50像素,左右各8像素(寬度調整),對於iPad設備,則爲400像素固定寬度。iOS9編程約束iPhone和ipad

這裏是這些約束指定了我的代碼部分:

text.topAnchor.constraint(equalTo: view.topAnchor, constant: 90).isActive = true 
text.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8).isActive = true 
text.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8).isActive = true 
text.heightAnchor.constraint(equalToConstant: 50).isActive = true 

此代碼爲iPhone設備提供正確的結果,但對於iPad設備是不是我想要得到(文本的寬度字段被調整)。我明白,該代碼塊是不正確的ipad。

我的問題是我如何設置上述邏輯的iPhone和iPad設備的編程約束?

我認爲可能的解決方案可能是在設置約束之前檢查屏幕大小的寬度,但我不知道這是否適合此任務的解決方案。

回答

1

8從右像素和左側的iPhone設備(這樣的寬度被調整的)和400像素的寬度固定在ipad設備的情況下

首先,讓我們注意到對於iPad上的限制是不充分指定,因爲你不是說視圖的X原點應該在iPad上。所以,爲了討論的目的,我將不得不做一些事情:我會說你想要視圖水平居中。

因此,你已經規定,你所要做的就是查看traitCollection並檢查其userInterfaceIdiom。這告訴你我們是在iPad還是iPhone(.pad.phone),並且簡單的if/else構造將允許您提供適當的一組約束。

所以,沒有我其實寫你的限制,這裏的結構,你會使用:

text.topAnchor.constraint(equalTo: view.topAnchor, constant: 90).isActive = true 
text.heightAnchor.constraint(equalToConstant: 50).isActive = true 
let dev = self.traitCollection.userInterfaceIdiom 
if dev == .phone { 
    text.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8).isActive = true 
    text.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8).isActive = true 
} else { 
    text.widthAnchor.constraint... 
    text.centerXAnchor.constraint... 
} 
3

爲了完成@馬特的偉大答案,這裏是你如何,如果檢查的例子設備是iPad或iPhone。

enum UIUserInterfaceIdiom : Int { 
    case unspecified 

    case phone // iPhone 
    case pad // iPad 
} 

然後,您可以使用它像這樣:

UIDevice.current.userInterfaceIdiom == .pad 
UIDevice.current.userInterfaceIdiom == .phone 
UIDevice.current.userInterfaceIdiom == .unspecified 

或者,如果你喜歡用一個開關:

switch UIDevice.current.userInterfaceIdiom { 
case .phone: 
    // It's an iPhone 
case .pad: 
    // It's an iPad 
case .unspecified: 
    // Error handling 
} 

對於你的情況,你可以簡單地使用的if/else聲明。

您只需檢查IF該設備是iPad或iPhone,然後相應地設置您的約束。

0

儘管Apple建議儘可能使用前導尾隨,但使用leftAnchor和RightAnchor替代前導/尾隨可能更適合跨設備。