如何使我的文本字段成为行而不是框?

Posted

技术标签:

【中文标题】如何使我的文本字段成为行而不是框?【英文标题】:How do I make my textfields as lines instead of boxes? 【发布时间】:2017-01-03 11:29:51 【问题描述】:

这是文本字段的理想设计:

这是我设计的:

我是否必须导入一些库或安装一些 pod?有没有一种程序化的方式来做到这一点?

【问题讨论】:

不,你可以绘制底部边框而不是整个边框 您可以将文本字段的边框设置为无,并在每个文本字段下方添加小视图 我该怎么做? Google 类似"ios custom uitextfield" 并使用弹出的第一个github link。 查看***.com/questions/29428402/… 【参考方案1】:

下面是代码。

@IBOutlet weak var fullName: UITextField!

override func viewDidLoad() 
    super.viewDidLoad()

    let bottomBorder = CALayer()
    bottomBorder.frame = CGRect(x: 0, y: fullName.frame.size.height-1, width: fullName.frame.size.width, height: 1.0)
    bottomBorder.backgroundColor = UIColor.white.cgColor
    fullName.layer.addSublayer(bottomBorder)

输出:

【讨论】:

【参考方案2】:

很快,我用以下代码实现了它:

class viewController: UIViewController 

    @IBOutlet weak var textfield: UITextField!

    let layer : CALayer = CALayer()

    override func viewDidLoad()
    
         textfield.borderStyle = .none // can do this in xib or storyboard too
         textfield.layer.masksToBounds = true
         layer?.borderColor = UIColor.lightGray.cgColor
         layer?.borderWidth = 1.0
         textfield.layer.addSublayer(layer)
    

   override func viewDidLayoutSubviews() 
   

        layer?.frame = CGRect(x: 0,
                               y: textfield.frame.size.height - 1,
                               width:  textfield.frame.size.width,
                               height: 1.0)



    


【讨论】:

注意:这是将层定义为CALayer! 类型的良好做法之一,因为viewDidLoad 肯定会在viewDidLayoutSubviews 之前被调用【参考方案3】:

您可以使用 CosmicMind 的 Material 框架并使用 textfield 对象。您可以通过 cocoapods 安装框架,并且可以按照他们在 repo 上的示例进行操作。

【讨论】:

以上是关于如何使我的文本字段成为行而不是框?的主要内容,如果未能解决你的问题,请参考以下文章

如何将StructType从Spark中的json数据框分解为行而不是列

使用模型表单集时如何呈现文本框而不是选择框

如何自定义 Material ui 表格单元格,以便其中的文本将占用两行而不是一行?

如何阻止 Chrome 使我网站的输入框变黄?

如何在 VBA 中获取对文本框控件的引用而不是文本框的值

如何在索引 2 处向 pandas 数据帧添加额外的行而不覆盖现有索引