web-dev-qa-db-ja.com

iPhoneUILabel-ノーブレークスペース

UILabelテキストで改行しないスペースを使用する方法はありますか?

たとえば、2行のラベルがあり、改行モードがワードラップに設定されています。このラベルのコンテンツはデータベースから読み取られ、文字列として保存されます。ラベルのテキストが次のようになることがあります。

lorem ipsum some text
1

しかし、私はそれをそのように表示したいと思います:

lorem ipsum some
text 1

基本的に、「テキスト」と「1」の間に改行なしのスペースを強制する必要があります。

私はいくつかの解決策を見つけました ここ 、しかし私はテキストがソースコードファイルに入力されたときにそれがうまくいくと思います。私の場合、テキストはデータベースにあります。

助言がありますか?

34
Marcin

ノーブレークスペース(\ u00a0)を使用します例:@"hello**\u00a0**world!"

post.text = [postText stringByAppendingString: @"1\u00a0hour\u00a0ago."];

U + 00A0 /ノーブレークスペース/コモンセパレーター、スペース

差出人: http://en.wikipedia.org/wiki/Whitespace_character

52
Robby Valles

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}を使用する必要があります

12
ronatory

これを.stringsファイルで機能させたい場合は、通常のスペースの代わりにOPTION + SPACEと入力できます。

.stringsファイルは通常UTF-8でエンコードされているため、16進ビューで開くと、特殊なスペース文字の代わりに「C2A0」が表示されます。

11
Gino

カスタムのワードラップ関数を実装する必要がある場合があります。

// 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

またはそのようなもの。

1
Stephen Furlani

UILabelでこれを行う簡単な方法はないと思います。もちろん、同じ効果を実現する1つの方法は、例の「"\n"の前にtext"を手動で挿入することです。別のオプションは、UILabelの代わりに静的HTMLでUIWebViewを使用することです。これにより、実際の&nbsp

1

これが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はこの問題を自動的に解決します

1
neave

インスペクターで、ラベルの行数を3または4に設​​定します。必要なものを選択すると、コンテンツが複数行で表示されます。

1
SNR

これが頻繁に発生しない場合は、次のようにすることができます。

NSString *string = @"lorem ipsum some \ntext 1";

label.text = string;

文字数、単語数などを使用して、\ nを配置する場所を動的に生成できます。

0
Aurum Aquila