0

線付きテキストを描画する UITextView (カスタム コントロール DALinedTextView) のサブクラスがあります。iOS5 と iOS6 では完璧に動作しますが、iOS7 では失敗します (テキストが行と一致しません)。

   - (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 1.0f);

    if (self.horizontalLineColor)
    {
        CGContextBeginPath(context);
        CGContextSetStrokeColorWithColor(context, self.horizontalLineColor.CGColor);

        // Create un-mutated floats outside of the for loop.
        // Reduces memory access.
        CGFloat baseOffset = 7.0f + self.font.descender;
        CGFloat screenScale = [UIScreen mainScreen].scale;
        CGFloat boundsX = self.bounds.origin.x;
        CGFloat boundsWidth = self.bounds.size.width;

        // Only draw lines that are visible on the screen.
        // (As opposed to throughout the entire view's contents)
        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 * line));
            // Rounding the point to the nearest pixel.
            // Greatly reduces drawing time.
            CGFloat roundedLinePointY = roundf(linePointY * screenScale) / screenScale;
            CGContextMoveToPoint(context, boundsX, roundedLinePointY);
            CGContextAddLineToPoint(context, boundsWidth, roundedLinePointY);
        }
        CGContextClosePath(context);
        CGContextStrokePath(context);
    }

    if (self.verticalLineColor)
    {
        CGContextBeginPath(context);
        CGContextSetStrokeColorWithColor(context, self.verticalLineColor.CGColor);
        CGContextMoveToPoint(context, -1.0f, self.contentOffset.y);
        CGContextAddLineToPoint(context, -1.0f, self.contentOffset.y + self.bounds.size.height);
        CGContextClosePath(context);
        CGContextStrokePath(context);
    }
}

私はそれがUIFontメトリクスに関連していることを知っています..おそらく誰かが私を助けることができますか? contentSize を embeddedContentSize に変更しましたが、機能しません。

systemFontOfSize を使用すると完全に機能しますが、fontWithName を使用すると失敗します。

ここに画像の説明を入力

4

3 に答える 3

0

このリンクをチェックしてください。iOS7で使用されているNSLayoutManagerDelegateを使用しています。iOS 7 では、styleString アプローチは機能しなくなりました。NSLayoutManagerDelegate を使用する必要があります。使いやすいです。

txtViewNote.layoutManager.delegate = self;
txtViewNote.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"textView_bg_lines"]];

- (CGFloat)layoutManager:(NSLayoutManager *)layoutManager lineSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(CGRect)rect
{
return 20.5; // For really wide spacing
}
于 2013-10-25T12:00:11.393 に答える
0

はい、カスタム コントロールを使用していると思いますDALinedTextView

あなたがiOS7で言ったような問題にも直面しています。でそのコントロールを正しくスクロールすることさえできませんiOS7

最初にそのコントロールを使用しましたが、今はそのままにして組み込みを使用していUITextViewます。:D

font sizeおそらく、 のandtext marginまたはを変更する必要がtext paddingありますtextView

于 2013-10-01T09:09:54.573 に答える