【问题标题】:iOS TextField view glides out of layoutiOS TextField 视图滑出布局
【发布时间】:2018-01-24 12:36:32
【问题描述】:

我在我的应用程序中使用 TextField。我做了它来包装内容。 问题是当用户键入长文本时,TextField 边缘会滑出布局并使某些视图不可见。 有没有办法在它到达布局边缘时禁用它?

【问题讨论】:

  • 显示你已有的代码
  • 能否提供截图
  • 没有代码,只有文本字段。我已经编辑并上传了截图

标签: ios swift xcode textfield


【解决方案1】:

最好的办法是将您的UITextField 更改为UITextView。这是一个我非常喜欢使用的函数,用于这种自动调整大小的技术,你会在 Apples iMessage 之类的产品中看到:

func containerViewHeight() {
    let size = textView.sizeThatFits(CGSize(width: textView.frame.size.width, height: CGFloat.greatestFiniteMagnitude))
    containerView.heightAnchor.constraint(equalToConstant: size.height + 24)
    self.textView.setContentOffset(.zero, animated: false)
}

您首先需要在 viewDidLoad 中调用此函数:

override func viewDidLoad() {
    self.containerViewHeight()
}

除此之外,您还需要通过在文件顶部对其进行子类化来符合 UITextViewDelegate 方法,如下所示:

class YourViewController: UIViewController, UITextViewDelegate

添加此 AND 后,您在 viewDidLoad 中使用了 self.textView.delegate = self

override func viewDidLoad() {
    self.textView.delegate = self
}

然后您就可以对该 textView 使用 textViewDidChange 方法,所以您最后要在类中添加的是:

func textViewDidChange(_ textView: UITextView) {
    self.containerViewHeight()
}

【讨论】:

  • 该解决方案是否保留了 TextField 的外观和感觉?因为我真的很喜欢它。
  • @OfekRegev 是的。它们看起来确实一样。 UITextField 和 UITextView 之间唯一真正的区别是 UITextView 更加灵活,而 UITextField 更适合始终位于一行的文本,即电子邮件
  • 我会试试的。看起来是一个不错的解决方案,但实施起来有点长。我会保留这个问题,让其他人也发布他们的解决方案。非常感谢。
  • @OfekRegev 我完全理解。答案看起来确实比实际要冗长一些,但是如果您遇到更有效的方法,我也很想知道。
【解决方案2】:

您的 textField 可能没有固定宽度。 只需在情节提要中的 textField 中设置宽度限制,这样无论文本是否太长,它都将始终具有相同的宽度。

编辑:如果你想要一个最大宽度,你可以在你的 textField 中添加 2 个宽度约束。一个用于最小宽度,一个用于最大宽度。这样,您的 textField 的宽度将在 100 到 200 之间变化,具体取决于它包含的文本。

最小宽度限制:

最大宽度限制:

【讨论】:

  • 我不想要一个固定的宽度。更像是最大宽度。
猜你喜欢
  • 2014-11-13
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多