如何使UITextView背景线与文本alignment?
我想绘制UITextView的背景线,这里是我用来绘制这些线的代码
CGContextBeginPath(context); CGContextSetStrokeColorWithColor(context, self.horizontalLineColor.CGColor); CGContextSetLineWidth(context, kDashedBorderWidth); CGContextSetLineDash(context, 0, kDashedLinesLength, kDashedCount) ; CGFloat baseOffset = 9.0f + self.font.descender; CGFloat boundsX = self.bounds.origin.x; CGFloat boundsWidth = self.bounds.size.width; NSInteger firstVisibleLine = MAX(1, (self.contentOffset.y / self.font.lineHeight)); NSInteger lastVisibleLine = ceilf((self.contentOffset.y + self.bounds.size.height) / self.font.lineHeight); for (NSInteger line = firstVisibleLine; line <= lastVisibleLine; ++line) { CGFloat linePointY = (baseOffset + (self.font.lineHeight * (float)line)); CGContextMoveToPoint(context, boundsX, linePointY); CGContextAddLineToPoint(context, boundsWidth, linePointY); } CGContextClosePath(context); CGContextStrokePath(context);
结果如图所示
它看起来像是正确的第一行,但下面的行不与文本alignment。
我可能在这里错过了什么? 与本地化设置有什么关系?
你可能想检查一下。
经过几次实验,我发现lineHeight
实际上比实际的高度要小一点,大约有1个点的大小。
这是工作版本
CGFloat baseOffset = 7.0f + self.font.descender; // .... for (NSInteger line = firstVisibleLine; line <= lastVisibleLine; ++line) { CGFloat linePointY = (baseOffset + ((self.font.lineHeight + 1.0f) * (float)line)); CGContextMoveToPoint(context, boundsX, linePointY); CGContextAddLineToPoint(context, boundsWidth, linePointY); }
有两个神奇的数字,我认为你需要找出你是否实现自己的版本: 7.0f
和1.0f
这只是一个工作,我很想知道一个更好的方式来实现这一目标。
这不是确切的解决scheme,但这个UI的方法。 这个用户界面给人一种下划线文本的感觉。
-
尝试使用带有下划线属性的NSAttributedString,您可以将虚线作为模式提供。
-
使用CoreText,您可以使用
kCTUnderlinePatternDash
属性在视图上绘制文本。 -
我可以在iOS的核心文本中使用NSAttributedString吗?
-
CoreText教程
但我想用这个,我们可以达到你需要的同样的function。
希望这可以帮助。