如何在多行UILabel中添加缩进?

时间:2017-07-21 12:16:33

标签: ios xamarin.ios uikit uilabel

虽然我发现如何在第一行(FirstLineHeadIndent)和其他行(HeadIndent)中添加缩进,但我找不到如何向仅前两行/三行添加缩进以便实现这样的事情: long live MS Paint!

PS:这不是重复,因为我询问如何缩进仅限第一行,正如一位用户建议的那样。

3 个答案:

答案 0 :(得分: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 :(得分:1)

您需要在故事板中将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

答案 2 :(得分: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'代码相结合应该可以解决这个问题。

How to manipulate NSAttributedString

Objective-C second line with indent