我目前正在研究iOS中的一个项目(使用XCode和Swift)。我正在尝试为登录视图实现以下UITextField:

uiview - UIView边框中的文本-LMLPHP

我正在考虑采取不同的方法来进行此操作,它们似乎都很复杂。如果有人知道执行此操作的 super 简单方法,或者已经有可用于创建此TextView的cocoapod,那将是惊人的。

这是我正在考虑的几种方法:

  • 只需创建一个带边框的UITextField,然后将UILabel的背景与父视图的背景匹配,就可以遮挡显示“登录”和“密码”的部分。这将在这些部分隐藏边界并解决问题。 这种方法的问题是背景是渐变,图案还是图像。在以下图像中可以看到:

  • uiview - UIView边框中的文本-LMLPHP
    uiview - UIView边框中的文本-LMLPHP

    如果用户在此处仔细查看“EMAIL”和“PASSWORD” UILabel,则可以看出它没有透明的背景,并且具有设置的背景颜色,以便遮挡UITextField的边框。

    而不是这样做,我想实际上停止绘制边框,这使我进入了第二种可能的实现方法。
  • 使用核心图形手动绘制UITextField的边框,这必须是动态的,因为可以有不同的长度字符串(“登录”为5个字符,“密码”为8)。这种方法似乎很复杂,因为处理CoreGraphics可以烦人。

  • 我无法提出任何其他实现此方法的方法,但是如果有一个不太麻烦的解决方案,我将不胜感激。

    最佳答案

    我相信这样做的一种方法是绘制各个边界:

    extension UITextField {
        func border(position: CGFloat) {
        let leftBorder = CALayer()
        leftBorder.frame = CGRect(x: CGFloat(0.0), y: CGFloat(0.0), width: CGFloat(1.0), height: CGFloat(self.frame.size.height))
        leftBorder.backgroundColor = UIColor.black.cgColor
        self.layer.addSublayer(leftBorder)
        let rightBorder = CALayer()
        rightBorder.frame = CGRect(x: CGFloat(self.frame.size.width - 1), y: CGFloat(0.0), width: CGFloat(1.0), height: CGFloat(self.frame.size.height))
        rightBorder.backgroundColor = UIColor.black.cgColor
        self.layer.addSublayer(rightBorder)
        let bottomBorder = CALayer()
        bottomBorder.frame = CGRect(x: CGFloat(0.0), y: CGFloat(self.frame.size.height - 1), width: CGFloat(self.frame.size.width), height: CGFloat(1.0))
        bottomBorder.backgroundColor = UIColor.black.cgColor
        self.layer.addSublayer(bottomBorder)
        let topBorder = CALayer()
        topBorder.frame = CGRect(x: CGFloat(0.0), y: CGFloat(0.0), width: CGFloat(25.0), height: CGFloat(1.0))
        topBorder.backgroundColor = UIColor.black.cgColor
        self.layer.addSublayer(topBorder)
        let width = CGFloat(self.frame.size.width - position)
        let topBorder2 = CALayer()
        topBorder2.frame = CGRect(x: position, y: CGFloat(0), width: width, height: CGFloat(1.0))
        topBorder2.backgroundColor = UIColor.black.cgColor
        self.layer.addSublayer(topBorder2)
    }
    

    关于uiview - UIView边框中的文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43484965/

    10-14 16:51