Swift iOS - TextField 初始宽度错误的底部边框

Posted

技术标签:

【中文标题】Swift iOS - TextField 初始宽度错误的底部边框【英文标题】:Swift iOS - Bottom Border on TextField initial wrong width 【发布时间】:2016-08-11 11:45:47 【问题描述】:

我实现了一个解决方案,将底部边框放置到一个效果很好的文本字段,但我有以下问题。如果我在更大尺寸(iPad mini、iPad Pro)或横向(iPhone6、6s)上启动应用程序,则文本字段下的行不正确拉伸。

我已经为文本字段创建了一个扩展:

extension UITextField 
/**
 Customize the UITextField for App

 - parameter isPasswordField: Boolean to check if this field is a password field

 - author: Simon Zwicker <simon.zwicker@gmail.com>
 */
func customize(isPasswordField: Bool) 
    let bottomLine = UIView()
    bottomLine.frame = CGRect(x: 0.0, y: self.frame.size.height - 1, width: self.frame.size.width, height: 1.0)
    bottomLine.backgroundColor = UIColor.grayColor()
    self.addSubview(bottomLine)

    self.tintColor = UIColor.grayColor()

    if isPasswordField 
        self.textColor = UIColor.blueColor()
    

我在viewWillLayoutSubviews() 中的文本字段上调用customize() 函数

我是不是在某个地方弄错了?在我将设备置于纵向并返回横向后,它就可以工作了。

文本域的初始大小是正确的,但自定义函数中的 self.frame.size.width 初始值太小。你知道可能发生了什么吗?

【问题讨论】:

【参考方案1】:

我能够复制您的问题,在调用 viewWillLayoutSubviews 时,文本字段的宽度似乎没有最终显示在屏幕上(或未应用约束)。

viewDidLayoutSubviews 中调用customize 可以正确缩放线条。我不确定您是否对此解决方案满意。

【讨论】:

我现在用 uiView 高度 1 和宽度等于情节提要中的文本字段来解决它。最简单的方法主要是非复合物;)

以上是关于Swift iOS - TextField 初始宽度错误的底部边框的主要内容,如果未能解决你的问题,请参考以下文章

损坏的内联 datePicker 作为 TextField Swift iOS 14 的 InputView

Swift iOS - 当 TextField、TextView 和背景被点击但丢失事件时删除视图

SwiftUI:自定义SearchBar

iOS-TextField知多少

iOS:更改 StackView 中 TextField 的高度(在 StackView 内)

IOS TextField设置大全