UILabelテキストで改行しないスペースを使用する方法はありますか?
たとえば、2行のラベルがあり、改行モードがワードラップに設定されています。このラベルのコンテンツはデータベースから読み取られ、文字列として保存されます。ラベルのテキストが次のようになることがあります。
lorem ipsum some text
1
しかし、私はそれをそのように表示したいと思います:
lorem ipsum some
text 1
基本的に、「テキスト」と「1」の間に改行なしのスペースを強制する必要があります。
私はいくつかの解決策を見つけました ここ 、しかし私はテキストがソースコードファイルに入力されたときにそれがうまくいくと思います。私の場合、テキストはデータベースにあります。
助言がありますか?
ノーブレークスペース(\ u00a0)を使用します例:@"hello**\u00a0**world!"
post.text = [postText stringByAppendingString: @"1\u00a0hour\u00a0ago."];
U + 00A0 /ノーブレークスペース/コモンセパレーター、スペース
Swiftの場合:
let sentence = "Barcelona, Real Madryt, Juventus Turyn, Bayern Monachium"
let sentencewithnbsp = String(map(sentence.generate()) {
$0 == " " ? "\u{00a0}" : $0
})
Swift 4では、すべて大文字を使用する必要がありました:\U00A0
例:
lorem ipsum some\U00A0text 1
コメントから2020年2月を更新します。おかげで @ corban:
Localizable.stringsファイルではまだ
\U00A0
である必要があります-コードでは\u{00a0}
を使用する必要があります
これを.stringsファイルで機能させたい場合は、通常のスペースの代わりにOPTION + SPACEと入力できます。
.stringsファイルは通常UTF-8でエンコードされているため、16進ビューで開くと、特殊なスペース文字の代わりに「C2A0」が表示されます。
カスタムのワードラップ関数を実装する必要がある場合があります。
// pseudo-code
instring;
get len(instring)
if len > textedit.width*charFontSize
for (textedit.width*charFontSize ) // cycle through string
insert `\n` into inString at shortest whitespace
またはそのようなもの。
UILabelでこれを行う簡単な方法はないと思います。もちろん、同じ効果を実現する1つの方法は、例の「"\n"
の前にtext"
を手動で挿入することです。別のオプションは、UILabelの代わりに静的HTMLでUIWebViewを使用することです。これにより、実際の 
。
これがSwift拡張機能で、最後のスペースを改行しないスペースに置き換えることで文字列内の孤立を修正します。
extension String {
var replacingLastSpace: String {
if let lastSpace = range(of: " ", options: .backwards, locale: .current) {
return replacingCharacters(in: lastSpace, with: "\u{00a0}")
}
return self
}
}
IOS 11の時点で注意してくださいが、 ILabelsはこの問題を自動的に解決します 。
インスペクターで、ラベルの行数を3または4に設定します。必要なものを選択すると、コンテンツが複数行で表示されます。
これが頻繁に発生しない場合は、次のようにすることができます。
NSString *string = @"lorem ipsum some \ntext 1";
label.text = string;
文字数、単語数などを使用して、\ nを配置する場所を動的に生成できます。