【问题标题】:How to reposition an UITextField to a specific position with Auto Layout如何使用自动布局将 UITextField 重新定位到特定位置
【发布时间】:2018-02-15 07:51:09
【问题描述】:

我正在为 IOS 创建一个关于 swift 4.0 的视图。我有 5 UITextField 就像我的例子一样。我想更改“tf5”的位置并将其放在“tf2”和“tf3”之间,但我不能在自动布局上使用边距顶部。我试图像其他解决方案一样定义约束,但到目前为止还不能解决这个问题。我怎样才能做到这一点?感谢您的帮助。

【问题讨论】:

  • 使用表格视图。

标签: ios swift autolayout uitextfield constraints


【解决方案1】:

因为你想要它以编程方式,这里有一个带有UIStackView的版本:

let tf1 = UITextField()
let tf2 = UITextField()
let tf3 = UITextField()
let tf4 = UITextField()
let tf5 = UITextField()

let stackView = UIStackView()
stackView.axis = .vertical
stackView.distribution = .fill
stackView.alignment = .fill
stackView.spacing = 8

// this arranges them from 1 to 5
stackView.addArrangedSubview(tf1)
stackView.addArrangedSubview(tf2)
stackView.addArrangedSubview(tf3)
stackView.addArrangedSubview(tf4)
stackView.addArrangedSubview(tf5)

// now you just need to use autolayout to position the stackview properly, and it will take
// care of textFields for you

// now if you want to place tf5 before tf3 later
let indexOfTF3 = stackView.arrangedSubviews.index(of: tf3)!
stackView.insertArrangedSubview(tf5, at: indexOfTF3)
// or you can use number 2 instead of indexOfTF3, since in this case we know that it is there

旁注:您可以使用相同的stackView 来定位tw1 UITextView,但如果我没记错的话,您必须添加一个约束来确定它的高度(因为它没有内在大小) stackView 的 .fill 分布才能正常工作。

【讨论】:

  • 谢谢,但我想问另一个问题。我可以在它们之间创建和添加一个新的 UITextField 而不是改变它的位置吗?
【解决方案2】:

UIStackView 组件在您的情况下会很有用。您可以做的是将所有字段添加到 -vertical-stack 视图中:

选择所有需要的文本字段/文本视图并点击“嵌入堆栈”按钮:

因此它应该在文档大纲区域中显示为:

简单地说,此时您所要做的就是拖动任何文本字段并更改其位置:


因此,您应该为新创建的堆栈视图设置适当的约束。并且 - 显然 - 它的属性,例如字段之间的间距(您可以在 IB 中完成)。

【讨论】:

  • 我想以编程方式进行,我的意思是使用代码。
  • @YunusEmreMeral 然后你可以添加一个表格视图并考虑每个字段代表一个单元格。
猜你喜欢
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多