使UIView和内容展开以使用自动布局填充UIToolbar中的可用水平空间

时间:2015-08-21 02:24:12

标签: ios swift autolayout constraints

我有一个UIBarButtonItem和一个UIView包含两个UITextField控件,所有控件都在UIToolbar内。

这是我的故事板的截图:http://i.8px.co/x8eC.png

我想创建类似于此的内容:http://i.8px.co/1hvY.png

我试图让UIView及其子项展开以使用自动布局填充UIToolbar中的可用水平空间。我不知道如何完成我想要的东西。

我为UIView尝试了一个肮脏的解决方案,并且能够正确地确定它的大小。

view.width = toolBar.frame.width - button.width 
// where view is the UIView, toolBar is the UIToolBar, and button is the UIBarButtonItem

我不相信这很优雅。这是以编程方式完成的,UIView不符合标准UIToolbar页边距,并且该解决方案不适用于UITextFields

3 个答案:

答案 0 :(得分:2)

我担心你必须以编程方式执行此操作。

试试这个:

  self.toolBarview.frame = (CGRect) {.origin = self.toolBarview.frame.origin.x, self.toolBarview.frame.origin.y, .size = [UIScreen mainScreen].bounds.size.width - self.barButton.width - 40, self.toolBarview.frame.size.height}; 

这里toolBarview是 UIView ,它有2 UITextField 。 40是缓冲区值,您需要减去该值以提供填充。

/ *编辑* /

您应该向UITextField提供适当的约束,如下所示:

Textfield Constraints

答案 1 :(得分:1)

“我正在尝试使UIView及其子项扩展以使用自动布局填充UIToolbar中的可用水平空间”您不能。 UIView位于UIBarButtonItem中,而UIBarButtonItem 不是视图。所以你不能在它上面使用自动布局。您必须手动设置其宽度。

答案 2 :(得分:1)

你可以通过多种方式实现这一目标,

执行这些约束

enter image description here

enter image description here

然后创建一个UITextField的子类,并执行此代码

class CustomTextField: UITextField {

override func textRectForBounds(bounds: CGRect) -> CGRect {
    return CGRectInset(CGRectMake(65, 0, bounds.size.width-65, bounds.size.height) , 0 , 0 )
}

override func editingRectForBounds(bounds: CGRect) -> CGRect {
    return CGRectInset(CGRectMake(65, 0, bounds.size.width-65, bounds.size.height) , 0 , 0 )
}
}

在storyboard / xib中,将textField连接到CustomTextField

enter image description here

为2个textFields

创建插座
@IBOutlet weak var textField1: CustomTextField!
@IBOutlet weak var textField2: CustomTextField!

在viewDidLoad()方法中,

  var label1 : UILabel = UILabel(frame: CGRectMake(5, (textField1.frame.height/2)-15, 100, 30))
    label1.textColor = UIColor.lightGrayColor();
    label1.text = "From:"

    var label2 : UILabel = UILabel(frame: CGRectMake(5, (textField1.frame.height/2)-15, 100, 30))
    label2.textColor = UIColor.lightGrayColor();
    label2.text = "To:"

    textField1.addSubview(label1)
    textField2.addSubview(label2)

然后你会得到类似......

的输出

enter image description here