Ios 两侧有水平线的Swift UIL标签

Ios 两侧有水平线的Swift UIL标签,ios,xcode,swift,uilabel,Ios,Xcode,Swift,Uilabel,我正在尝试创建一个UILabel,其左右两侧有两条水平线,如下所示: 有人知道在Swift中执行此操作的最佳方法吗?中心的内容文本将更改,因此我希望确保它能够适应。我真的很想创建某种可重用的UIView类,但我不确定从哪里开始 谢谢大家! 您可以选择标签两侧的两个高度1或2像素的UIview。所以它看起来像一条线 你应该把背景颜色设置为黑色的视图 希望这会有所帮助:)使用一个背景为黑色且高度为1px的UIView,将标签背景设置为白色,将其文本对齐到UIView的中心,并将UILabel对齐到

我正在尝试创建一个UILabel,其左右两侧有两条水平线,如下所示:

有人知道在Swift中执行此操作的最佳方法吗?中心的内容文本将更改,因此我希望确保它能够适应。我真的很想创建某种可重用的UIView类,但我不确定从哪里开始


谢谢大家!

您可以选择标签两侧的两个高度
1或2
像素的
UIview
。所以它看起来像一条线

你应该把背景颜色设置为黑色的视图


希望这会有所帮助:)

使用一个背景为黑色且高度为1px的UIView,将标签背景设置为白色,将其文本对齐到UIView的中心,并将UILabel对齐到UIView的中心(不需要两个视图,因为标签白色背景将覆盖UIView).

取一个高度为2的
ui视图
。根据
超级视图
设置
前导和尾随

现在取一个背景色为白色的
ui标签
,将
垂直居中
放置到线视图中

使两个
居中
相同

你的工作完成了

有关更多帮助,请参阅下图


不需要2个UIView

采用1 UIView并为背景提供黑色颜色。添加必要的约束条件:高度=2


将1个标签放在中心并给出所需的约束条件

您可以在UILabel上使用扩展

public extension UILabel {
    func drawLineOnBothSides(labelWidth: CGFloat, color: UIColor) {

        let fontAttributes = [NSFontAttributeName: self.font]
        let size = self.text?.size(attributes: fontAttributes)
        let widthOfString = size!.width

        let width = CGFloat(1)

        let leftLine = UIView(frame: CGRect(x: 0, y: self.frame.height/2 - width/2, width: labelWidth/2 - widthOfString/2 - 10, height: width))
        leftLine.backgroundColor = color
        self.addSubview(leftLine)

        let rightLine = UIView(frame: CGRect(x: labelWidth/2 + widthOfString/2 + 10, y: self.frame.height/2 - width/2, width: labelWidth/2 - widthOfString/2 - 10, height: width))
        rightLine.backgroundColor = color
        self.addSubview(rightLine)
    }
}

这将在标签的两侧添加宽度为1.0的水平线。如果您不为标签添加文本,它将显示两条穿过中心的水平线,中间有一些空格。

如其他人所述,您可以使用三个视图来实现这一点:

将视图添加到场景中以用作容器。我将此视图称为“有线条的标签夹”

向该容器添加两个视图,一个用于在标签的任一侧生成线

在两个视图之间添加标签,并为其提供一些文本。由于内衬标签架上的“高度=测试高度”约束,此标签的固有高度用于计算容器的高度

允许标签随着添加的文本而增长,线条始终从文本边缘的5px开始,并延伸到容器的边缘,其宽度可以单独设置

此图显示了所需的约束:


创建uiview子类。为线和uilabel添加2个子视图。为您的目的设置CGRect。您是否使用故事板?这些线的宽度是固定的吗?还是以编程方式完成?+垂直居中+水平间距UIlabel@simpleBob:是的,需要设置适当的约束。如果文本发生更改,这会起什么作用?我希望它是动态的。只要随着文本的增加而增加
UILable宽度即可。