如何为多行UILabel添加缩进?

3

虽然我已经找到了如何添加首行缩进(FirstLineHeadIndent)和其他行的缩进(HeadIndent),但我无法找到如何添加缩进以仅适用于前两三行,以实现类似以下的样式:

long live MS Paint!

PS:这不是重复的问题,因为我没有问如何仅缩进第一行,正如一个用户所建议的。


可能是如何在iOS中仅缩进多行UILabel的第一行?的重复问题。 - Tamás Sengel
@the4kman 请查看PS部分。 - nicks
看这个:https://dev59.com/jprga4cB1Zd3GeqPiSAB - Dharma
我建议使用一个禁用编辑的UITextField。添加一个带有所需高度和宽度的LeftView(您的图像)。 https://dev59.com/3lwY5IYBdhLWcg3wh4Eq - Singhal2
3个回答

5

您需要在Storyboard中将UILabel文本设置为Attributed字符串。

然后,您可以编辑每行的缩进,还可以粘贴任何使用文本编辑器创建的文本,并且它将保留其缩进以及其他属性。

当然,您也可以通过编程方式操纵这些属性,以下是一个示例:

@IBOutlet weak var label: UILabel!
 let text = "\tfirst line\n \tsecond line\nthird line\nforth line"

 let paragraphStyle = NSMutableParagraphStyle()
 paragraphStyle.tabStops = [NSTextTab(textAlignment: NSTextAlignment.left, location: 15, options: [:])]
 paragraphStyle.headIndent = 10

 label.attributedText = NSAttributedString(string: text, attributes: [NSParagraphStyleAttributeName: paragraphStyle])

这是一个配置示例:

enter image description here

以下是如何配置缩进:

enter image description here

这是模拟器上的示例:

enter image description here


我不明白我的答案有什么问题?请给我指点迷津。提问者没有说明文本必须根据图片或复选框对齐。 - inspector_60
请查看我的答案。 - inspector_60
将光标放在您想更改的行上,然后单击我标记的按钮,在下拉菜单中每行都有自己的值。 - inspector_60
如果我想以编程的方式实现这个,怎么办?例如,更改文本。 - nicks
请停止继续询问。 - nicks
显示剩余4条评论

4

iOS中如何使用TextKit框架

CGRect checkBoxFrame = [self.textView convertRect:self.checkView.bounds fromView:self.checkView];
checkBoxFrame.origin.x -= self.textView.textContainerInset.left;
checkBoxFrame.origin.y -= self.textView.textContainerInset.top;
UIBezierPath *checkBoxPath = [UIBezierPath bezierPathWithOvalInRect:checkBoxFrame];
self.textView.textContainer.exclusionPaths = @[checkBoxPath];

它将排除TextView内容内部的图像路径。


1
不是 C# 的解决方案,但对问题有趣的看法。=) - JoeTomks
我需要一个关于 UILabel 的解决方案。 - nicks
禁用TextView的用户交互将得到一个标签。UILabel是只读UITextView,两者类似。请查看https://dev59.com/H2025IYBdhLWcg3wYE-G#6040449。 - Saranjith

0

您需要使用UILabel.AttributedText的stringattribute属性。

实际上它是NSMutableAttributedString类型,所以我首先将label.AttributedText转换为可变类型,然后才能对其进行操作。

要做到这一点,您需要使用以下内容:

var mutable = Control.AttributedText as NSMutableAttributedString;
UIStringAttributes uiString=new UIStringAttributes();

然后您需要在第一行上设置缩进(按照您已经知道的方式进行),然后您将设置其段落样式的headIndent,如下所示。

这是从Objective-C转换而来,因此可能不完美:

NSMutableParagraphStyle paragraphStyle = new NSMutableParagraphStyle();
paragraphStyle.headIndent = 14;

NSDictionary attributes (){
    StyleAttributeName = paragraphStyle;
};

mutable.AddAttribute(attributes);

Control.attributedText = mutable;

我相信这样的代码结合你的“FirstLineHeadIndent”代码应该可以解决问题。


如何操作NSAttributedString

Objective-C带缩进的第二行


这对于仅缩进前两行是不起作用的。 - nicks
1
即使这样做了,如果我需要缩进三行怎么办? - nicks
老实说,我认为除非你在属性字符串上进行相当大的修改,否则很难使超过两行文本缩进。 - JoeTomks
我能想到的另一件事是通过编程在两个标签之间拆分文本,这样您就可以在需要的位置拥有一个标签,并且另一个标签可以完全拉伸到左右两侧。 - JoeTomks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接