我有一个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
。
答案 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
提供适当的约束,如下所示:
答案 1 :(得分:1)
“我正在尝试使UIView及其子项扩展以使用自动布局填充UIToolbar中的可用水平空间”您不能。 UIView位于UIBarButtonItem中,而UIBarButtonItem 不是视图。所以你不能在它上面使用自动布局。您必须手动设置其宽度。
答案 2 :(得分:1)
你可以通过多种方式实现这一目标,
执行这些约束
然后创建一个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
为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)
然后你会得到类似......
的输出