是否可以在UITextField的leftView中使用自动布局?

时间:2018-10-18 10:19:13

标签: ios autolayout uitextfield icons

我想使用根据其内容自动调整大小的视图来自定义UITextField的{​​{1}}:

leftView

其中func set(leftImage image: UIImage) { let imageView = UIImageView(image: image) let paddingContainer = UIView() // This is the crucial point: paddingContainer.translatesAutoresizingMaskIntoConstraints = false paddingContainer.addSubview(imageView) imageView.pin(toMarginsOf: paddingContainer) leftView = paddingContainer leftViewMode = .always } 方法仅将四个侧面的图像视图固定在pin的空白处:

paddingContainer

在iOS 12上,一切正常,但在<12版的iOS版本上,图像完全放错了位置。它甚至不在文本字段的范围内,而是在我的视图控制器视图的左上角。

对我来说,似乎旧版本的iOS不支持在您设置为文本字段的func pin(toMarginsOf view: UIView) { translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor), .bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor), leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor), trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor) ]) } 的视图内使用自动布局。该文档指出:

  

左侧叠加层视图放置在接收者的leftView方法返回的矩形中。

但它没有说明如何放置在那里:通过使用约束或直接设置框架。

leftViewRect(forBounds:)是否完全支持使用自动版式?是否有可靠的消息来源或有根据的猜测?

2 个答案:

答案 0 :(得分:0)

function showInputValue() {
  const inputValue = document.getElementById("numberInput").value;
  const inputValueAsNumber = document.getElementById("numberInput").valueAsNumber;
  
  console.log(`value is: "${inputValue}"\nvalueAsNumber is: "${inputValueAsNumber}"`);
}

document.getElementById("btn").addEventListener("click", showInputValue)

希望这会有所帮助

答案 1 :(得分:0)

您可以像这样在布局子视图功能上设置其框架

    override func layoutSubviews() {
    super.layoutSubviews()
    if let lv = self.leftView {
        lv.frame = CGRect(x: 0, y: 0, width: self.bounds.height, height: self.bounds.height)
    }
   }