本文介绍了UITextView带下划线的文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我有UITextView并希望为所选文本加下划线。 它正在使用此代码I have UITextView and want to underline selected text.It is working by this codeNSRange range = selectedTextView.selectedRange;NSTextStorage *textStorage = selectedTextView.textStorage;[textStorage addAttribute: NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:range];但基线下有尾巴的字母(如qygp)没有加下划线(截图: http://i.stack.imgur.com/dRrEH.png )。 我还注意到基线和下划线之间的空间取决于字体。But letters which have "a tail" under baseline (as q y g p) are not underlined (screenshot: http://i.stack.imgur.com/dRrEH.png).Also I noticed that space between baseline and underline depends on font.如何在没有任何断裂/间距的情况下为文本加下划线?How can I underline text without any breakings/spacing?推荐答案 #import <UIKit/UIKit.h>@interface TextViewWithUnderline : UITextView@end#import "TextViewWithUnderline.h"@implementation TextViewWithUnderline- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { //self.contentMode = UIViewContentModeRedraw; } return self;}- (void)drawRect:(CGRect)rect { //Get the current drawing context CGContextRef context = UIGraphicsGetCurrentContext(); //Set the line color and width CGContextSetStrokeColorWithColor(context, [UIColor lightGrayColor].CGColor); CGContextSetLineWidth(context, 1.0f); //Start a new Path CGContextBeginPath(context); //Find the number of lines in our textView + add a bit more height to draw lines in the empty part of the view NSUInteger numberOfLines = (self.contentSize.height + self.bounds.size.height) / self.font.leading; //Set the line offset from the baseline. (I'm sure there's a concrete way to calculate this.) CGFloat baselineOffset = 6.0f; //iterate over numberOfLines and draw each line for (int x = 1; x < numberOfLines; x++) { //0.5f offset lines up line with pixel boundary CGContextMoveToPoint(context, self.bounds.origin.x + 10, self.font.leading*x + 0.5f + baselineOffset); CGContextAddLineToPoint(context, self.bounds.size.width - 10, self.font.leading*x + 0.5f + baselineOffset); } //Close our Path and Stroke (draw) it CGContextClosePath(context); CGContextStrokePath(context);}@end#import <UIKit/UIKit.h>#import "TextViewWithUnderline.h"@interface CustomTextView : UIViewController@property (weak, nonatomic) IBOutlet TextViewWithUnderline *textView;@end#import "CustomTextView.h"@interface CustomTextView ()@end@implementation CustomTextView- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self;}- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view. self.textView.contentMode = UIViewContentModeRedraw;}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end 这篇关于UITextView带下划线的文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-28 05:02