我希望在包含一些文本的UITextView中绘制一个可自定义的行(使用NSAttributedString)
这是我尝试过的
Nsstring *unicodeStr = [Nsstring stringWithFormat:@"%C%C%C",0x00A0,0x0009,0x00A0]; //nbsp,tab,nbsp NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:unicodeStr]; NSRange strRange = NSMakeRange(0,str.length); NSMutableParagraphStyle *const tabStyle = [[NSMutableParagraphStyle alloc] init]; tabStyle.headindent = 16; //padding on left and right edges tabStyle.firstLineHeadindent = 16; tabStyle.tailIndent = -16; NSTextTab *listTab = [[NSTextTab alloc] initWithTextAlignment:NSTextAlignmentCenter location:40 options:@{}]; //this is how long I want the line to be tabStyle.tabStops = @[listTab]; [str addAttribute:NSParagraphStyleAttributeName value:tabStyle range:strRange]; [str addAttribute:NsstrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:strRange];
但无论我为制表位置(本例中为40)和tailIndent(此处为-16)提供的值,该行仅尊重headindent并跨越整个UITextView宽度(当然减去headindent).
编辑 – 我很确定问题是因为我没有使用正确的unicode字符(尽管它们似乎是合乎逻辑的选择).如果这给某人一个提示,如果我在第二个之后添加一个空格,即朝向末尾,则标签仅限于一个标签长度
解决方法
这是你的预期结果吗?
你能试试这个:
NSTextTab *listTab = [[NSTextTab alloc] initWithTextAlignment:NSTextAlignmentCenter location:self.textView.frame.size.width - tabStyle.firstLineHeadindent + tabStyle.tailIndent options:@{}];
这是完整的代码:
- (void) viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; Nsstring *unicodeStr = @"\n\u00a0\t\t\n"; NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:unicodeStr]; NSRange strRange = NSMakeRange(0,str.length); NSMutableParagraphStyle *const tabStyle = [[NSMutableParagraphStyle alloc] init]; tabStyle.headindent = 16; //padding on left and right edges tabStyle.firstLineHeadindent = 16; tabStyle.tailIndent = -70; NSTextTab *listTab = [[NSTextTab alloc] initWithTextAlignment:NSTextAlignmentCenter location:self.textView.frame.size.width - tabStyle.headindent + tabStyle.tailIndent options:@{}]; //this is how long I want the line to be tabStyle.tabStops = @[listTab]; [str addAttribute:NSParagraphStyleAttributeName value:tabStyle range:strRange]; [str addAttribute:NsstrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:strRange]; NSAttributedString *htmlStr = [[NSAttributedString alloc] initWithData:[@"<h1>Lorem ipsum dolor sit er elit lamet</h1>" dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; [str insertAttributedString:htmlStr atIndex:0]; [str appendAttributedString:htmlStr]; self.textView.attributedText = str; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。