2017-02-20 71 views
0

我有3个标签彼此相邻这样只允许标签尽可能宽?

stackview

第一和最后一个标签将要动态地填充有可变长度的单词的水平堆叠视图中,而中间的一个总是将包含单词“with”,例如:“用Swift编码!”

我不想在每个单词之间留出额外的空间,因为如果单词很短,看起来很奇怪。有没有什么方法可以使标签的宽度与其所需的宽度相匹配?这样一切都看起来像一个标签(除了我让中间标签有更小的文字)。

+0

这不是故事板的默认UILabel行为吗?您可以为此使用自动布局。 –

回答

2

添加一个UIView,而不是堆栈视图中3个标签。 并设置约束如图所示。

enter image description here

enter image description here

+0

我给堆栈视图分配什么? – MarksCode

+0

另外,如果第一个单词比“编码”更长或更短,该怎么看起来很时髦? – MarksCode

+0

我在说不要使用堆栈视图来代替使用UIView。 如果编码是短文本,则会相应地进行调整。编辑答案。 –

0

你可以把一个标签,而不是服用三个标签 和并设置标签上的文字

label.text= firstLabel.text + "with" + lastLabel.text 
+0

但是我可以让“with”这个词小于文本的其余部分吗? – MarksCode

+0

是的,你可以做到这一点,即在同一个UILabel中创建不同大小的文本。查看NSLocalizedString,然后做label.text = NSLocalizedString。 –

+0

嗯,我可能会最终用这个解决方案,然后 – MarksCode

1

如何使用自动布局? 您可以在标签和中间宽度的约束之间给出水平空间0。

1

如果妳希望有不同的字体在标签内容,您可以使用NSAttributedString

let boldFontDict:[String: AnyObject] = [NSForegroundColorAttributeName : UIColor.black, NSFontAttributeName: <UI Font>] 

let 1stString = NSAttributedString(string: "Hello")  
let 2ndString = NSAttributedString(string: "hii", attributes: boldFOntDict) 

let finalAttrStr = NSMutableAttributedString(attributedString: 1stString) 

finalAttrStr.append(2ndString) 

myLabel.attributedText = finalAttrStr 
+0

做什么?第一个字符串左对齐,第二个字符串居中,第三个字符串右对齐。你可以发布解决方案实现吗? –

+0

由于内容是动态的,因此难以管理3个标签的宽度。 – Anuraj

+0

相反,你可以将你的'myLabel'对齐为'居中对齐',并且可以给每个'属性字符串赋予不同的字体大小。' –

0

您可以使用自动布局来解决这个问题。