簡體   English   中英

UITextField以布局方式自動設置邊距

[英]UITextField autolayout with margins programmatically

我是AutoLayout的新手,我想以100%的寬度顯示我的UITextField,左右邊距保持一致15px,如下所示:

在此處輸入圖片說明

通常,我將使用CGRect進行此操作,將寬度設置為包含視圖的寬度減去30px,然后將左側偏移15px:

searchTextField.frame = CGRectMake(15, 0, view.frame.width - 30, 50)

但是我想學習AutoLayout這類東西,因為這是最近的方式。 我應該注意,我正在以編程方式進行所有操作-這里沒有Storyboard。

如果有人可以幫助我,我會喜歡的!

更新

哇! 感謝您的所有答復。 我相信他們所有人都會實現我想做的事情,但是只能有一個:)

假設文本字段的父對象是view ,請在view.addSubview(searchTextField)之后執行以下view.addSubview(searchTextField)

NSLayoutConstraint.activateConstraints([
    searchTextField.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor, constant: 15),
    searchTextField.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor, constant: -15),
    ])

通常,我使用這種處理約束的cocoapod,但如果您需要純蘋果解決方案文檔說明,則為:

以編程方式創建約束時,有三個選擇:可以使用布局錨,可以使用NSLayoutConstraint類或可以使用可視格式語言。

您的情況下使用NSLayoutConstraints的方法是:

NSLayoutConstraint(item: textField, attribute: .Leading, relatedBy: .Equal, toItem: parentView, attribute: .LeadingMargin, multiplier: 1.0, constant: 15.0).active = true

NSLayoutConstraint(item: textField, attribute: .Trailing, relatedBy: .Equal, toItem: parentView, attribute: .TrailingMargin, multiplier: 1.0, constant: -15.0).active = true

NSLayoutConstraint(item: textField, attribute: .Top, relatedBy: .Equal, toItem: parentView, attribute: .TopMargin, multiplier: 1.0, constant: 50.0).active = true

請記住,如果視圖中沒有任何約束,則會自動添加約束,並且您必須處理它們以及通過在運行時添加新約束而產生的沖突。 為了避免這種情況,您可以手動創建textField並將其添加到視圖中,或者在Interface Builder中以低優先級設置約束。

使用此代碼:

let topConstraint = NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.Top, relatedBy: .Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0)

let trailingConstraint  = NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.Trailing, relatedBy: .Equal, toItem: self.view, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 15)

let leadingConstraint = NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.Leading, relatedBy: .Equal, toItem: self.view, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 15)

let heightConstraint = NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.Height, relatedBy: .Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 50)

self.view.addConstraint(topConstraint )
self.view.addConstraint(trailingConstraint)
self.view.addConstraint(leadingConstraint)
self.view.addConstraint(heightConstraint)

在情節提要中設置約束。

單擊文本字段,然后單擊 別針按鈕 在左下角。 從那里您可以選擇類似的約束。

要使用自動布局,您需要為文本字段定義約束。在這里,我創建了四個與其上級相關的約束(前導,尾隨,頂部和高度)。

func addLabelConstraints(superView:UIView) {

    let leading = NSLayoutConstraint(item: searchTextField, attribute: .Leading, relatedBy: .Equal, toItem: superView, attribute: .Leading, multiplier: 1, constant: 15)
    superview!.addConstraint(leading)

    let trailing = NSLayoutConstraint(item: searchTextField, attribute: .Trailing, relatedBy: .Equal, toItem: superView, attribute: .Trailing, multiplier: 1, constant: 15)
    superView.addConstraint(trailing)

    let top = NSLayoutConstraint(item: searchTextField, attribute: .Top, relatedBy: .Equal, toItem: superView, attribute: .Top, multiplier: 1, constant: 0)
    superView.addConstraint(top)

    let height = NSLayoutConstraint(item: searchTextField, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 0, constant: 50)
    superView.addConstraint(height)
 }

暫無
暫無

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

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