2017-09-11 2 views
0

CoreTextに慣れようとしています。UITextView内のブロッククォートのようにテキストを書式設定する方法

私は正規表現をAttributedStringsと組み合わせて使用​​しており、今入力しているStackOverflowテキストボックスの機能を本質的に模倣しようとしています。

大胆

斜体

ヘッダ

emphasis blocks

しかし、私はブロック引用を作るのに苦労しています:

私のような一般的なもののすべてを持っています/コードブロック。

これは、テキストがどれほど長くても、それ自体の行に壊れてエッジに行くボックスを作成するようなものです。

And it changes the background color 

これはAttributedStringsを使用して厳密に行うことも可能ですか?私はHTML/CSSが注入されているいくつかの古い例を見てきましたが、私はある特別なNSAttributedStringKeyの組み合わせを使ってそれを達成できることを期待していました。

答えて

1

はい、可能です。ここで

import UIKit 
import PlaygroundSupport 

let richText = NSMutableAttributedString() 

let chunk0 = NSAttributedString(string: "But I am struggling to make a block quote/code block.\n\n") 
richText.append(chunk0) 

let paragraphStyle = NSMutableParagraphStyle() 
paragraphStyle.headIndent = 20 
// Note that setting paragraphStyle.firstLineHeadIndent 
// doesn't use the background color for the first line's 
// indentation. Use a tab stop on the first line instead. 
paragraphStyle.tabStops = [NSTextTab(textAlignment: .left, location: paragraphStyle.headIndent, options: [:])] 

let chunk1 = NSAttributedString(string: "\tSomething like this where it breaks to its own line and creates a box that goes to the edge no matter how long the text is.\n", attributes: [ 
    NSParagraphStyleAttributeName: paragraphStyle, 
    NSBackgroundColorAttributeName: UIColor.yellow 
]) 
richText.append(chunk1) 

let chunk2 = NSAttributedString(string: "\nIs this even possible to do strictly using AttributedStrings?") 
richText.append(chunk2) 

let textView = UITextView(frame: CGRect(x: 0, y: 0, width: 120, height: 400)) 
textView.backgroundColor = .white 
textView.attributedText = richText 
PlaygroundPage.current.liveView = textView 

出力です:ここでスウィフト3のサンプル遊び場です

result

しかし、それはUITextViewがウェブより(レイアウトやスタイリングのために)あまり強力であることを心に留めておくことが重要ですビュー。 (stackoverflowのように、ブロッククォートボックスの左端に沿って濃い色の線を使用しているように)HTMLとCSSを生成し、Webビューを使用するだけです。

+0

ああ、段落スタイルを使用する方法です:)ありがとう!また、オプションに気付きました。[:]私は全くやっていないと思っていましたが、助けになるでしょう。だから二重の感謝! – sargturner

関連する問題