【问题标题】:Add padding between label and its border在标签及其边框之间添加填充
【发布时间】:2016-11-02 16:50:03
【问题描述】:

我的 swift 应用程序中有一些应该有边框的标签。我为我的标签添加了边框,但我希望标签和它的边框之间有更多的空间。

我该怎么做?

【问题讨论】:

  • 你想在哪里添加空间?左填充,右填充?
  • 左、右、上、下
  • @Larme 我已经找到了,但是当我将它添加到我的代码中时:override func drawTextInRect(rect: CGRect) { let insets = UIEdgeInsets.init(top: 5, left: 5, bottom: 5, right: 5) super.drawTextInRect(UIEdgeInsetsInsetRect(rect, insets)) } 它给了我“方法不会覆盖其超类中的任何方法”以及“类型为“UIViewController”的值没有成员 drawTextInRect"
  • 它是UILabel 的子类,而不是UIViewController 的子类。

标签: ios iphone swift


【解决方案1】:

试试这个:

myLabel.frame.size.width = myLabel.intrinsicContentSize.width + 10
myLabel.frame.size.height = myLabel.intrinsicContentSize.height + 10
myLabel.textAlignment = .center

【讨论】:

  • 很高兴为您提供帮助:)
【解决方案2】:

一个简单的解决方案是将标签嵌入到视图中,然后将边框添加到此视图,而不是添加到标签本身。希望对您有所帮助。

【讨论】:

    【解决方案3】:

    1.添加此类

    PaddingLabel.swift

    import UIKit
    
    class PaddingLabel: UILabel {
    
        var edgeInset: UIEdgeInsets = .zero
    
        override func drawText(in rect: CGRect) {
            let insets = UIEdgeInsets.init(top: edgeInset.top, left: edgeInset.left, bottom: edgeInset.bottom, right: edgeInset.right)
            super.drawText(in: rect.inset(by: insets))
        }
    
        override var intrinsicContentSize: CGSize {
            let size = super.intrinsicContentSize
            return CGSize(width: size.width + edgeInset.left + edgeInset.right, height: size.height + edgeInset.top + edgeInset.bottom)
        }
    }
    

    2。将标签的类更改为PaddingLabel

    3.将此代码添加到您的ViewController

    import UIKit
    
    class LabelViewController: UIViewController {
    
        @IBOutlet weak var label: PaddingLabel!
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            //Setting the border
            label.layer.borderWidth = 1
            label.layer.borderColor = UIColor.blue.cgColor
            
            //Setting the round (optional)
            label.layer.masksToBounds = true
            label.layer.cornerRadius = label.frame.height / 2
        
            //Setting the padding label
            label.edgeInset = UIEdgeInsets(top: 5, left: 10, bottom: 5, right: 10)
        
        }
    }
    

    结果

    【讨论】:

    • 这很有帮助,谢谢!不幸的是,基本的 UILabel 没有附带这个,你必须继承!
    【解决方案4】:

    我这样做了(将文本放在同一个地方):

    //label position
    myLabel.layer.frame.size.width += 10
    myLabel.layer.frame.origin.x -= 5
    myLabel.textAlignment = .center
    
    //border
    myLabel.layer.borderColor = UIColor.systemTeal.cgColor
    myLabel.layer.borderWidth = 1.0
    label.layer.cornerRadius = 8.0
    

    【讨论】: