Вычисление достаточного количества текста для размещения в существующей UILabel - PullRequest
1 голос
/ 06 сентября 2011

Я не могу заставить работать какой-нибудь код переноса текста CoreText;это слишком сложно.Я собираюсь попробовать другой путь, который состоит в том, чтобы разделить мою UILabel на две части.

Я пытаюсь добиться того, чтобы мой текст обернулся вокруг моего прямоугольного изображения фиксированного размера.Размеры всегда будут одинаковыми.

Итак, когда UILabel рядом с изображением точно заполняется, под ним будет создан еще один UILabel.

Теперь, как мне рассчитать текст в первой UILabel и правильно разместить его по всей ширине UILabel, не будучи слишком коротким или обрезанным в конце?

Ответы [ 2 ]

1 голос
/ 01 октября 2011

Ну, это должно сработать, чтобы получить подстроку мастер-строки, которая уместится в желаемой ширине:

//masterString is your long string that you're looking to break apart...
NSString *tempstring = masterString;

while (someLabel.bounds.size.width < [tempString sizeWithFont:someLabelLabel.font].width) {
    NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[tempString componentsSeparatedByString:@" "]];
    //Remove the last object, which is the last word in the string...
    [tempArray removeLastObject];

    //Recreate the tempString with the last word removed by piecing the objects/words back together...
    tempString = @"";
    for (int i=0; i < tempArray.count - 1; i++) {
        tempString = [tempString stringByAppendingFormat:@"%@ ", [tempArray objectAtIndex:i]];
    }
   //You must append the last object in tempArray without the space, or you will get an infinite loop...
    tempString = [tempString stringByAppendingFormat:@"%@", [tempArray objectAtIndex:tempArray.count - 1]];
}
//Now do whatever you want with the tempString, which will fit in the width desired...

Конечно, это предполагает, что вы хотите, чтобы разделение происходило с использованием переноса слов.Если вы не возражаете против того, чтобы сами слова были разделены (т.е. перенос символов), чтобы полностью занять желаемую ширину, сделайте это вместо:

NSString *tempstring = masterString;

while (someLabel.bounds.size.width < [tempString sizeWithFont:someLabelLabel.font].width) {
    tempString = [tempString substringToIndex:tempString.length - 1];
}
//Now do whatever you want with the tempString, which will fit in the width desired...

, чтобы оставить оставшуюся часть строкиболее того, сделайте это:

NSString *restOfString = [masterString substringFromIndex:tempString.length];

Надеюсь, это поможет.Я должен признать, что я еще не проверил этот код должным образом, хотя я делал нечто подобное в прошлом ...

0 голосов
/ 06 сентября 2011

Попробуйте ссылку ниже, это поможет вам.

Если вы хотите создать «ссылку» на некоторый пользовательский текст в ярлыке, вместо использования WebView, как предложил @Fabian Kreiser, вы можете использовать мой класс OHAttributedLabel (вы можете найти его по этой ссылке)

См. Пример кода, предоставленный в моем репозитории github: вы можете использовать мой метод addCustomLink:inRange:, чтобы добавить ссылку (с настраиваемым URL) к диапазону текста (диапазон, который можно определить, просматривая каждое вхождение слова «айфон» в вашем тексте очень легко). Затем в методе делегата на OHAttributedLabel вы можете отследить, когда ссылка нажата, и действовать соответственно, чтобы сделать все, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...