Подтвердить что ты не робот

Автоматическое изменение размера UILabel на основе текста, который будет отображаться

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

Во-первых, я не уверен в этом, либо я должен использовать UILabel (логически - лучший выбор для отображения статического текста, который в моем случае) или UITextView.

Как я могу его использовать?
Я хочу просто создать свой текст или текстовое представление в этом отношении с помощью Text. Вместо этого я сначала определяю кадр, а затем ограничиваю свой текст в этой области.

Если вы можете предложить правильное решение, это будет большой помощью.

Я просмотрел документацию и другие ссылки, но не нашел много, что могло бы помочь мне здесь, или я мог упустить это.

4b9b3361

Ответ 1

Метод sizeToFit работал просто отлично.

Я сделал следующее.

UILabel *testLabel =[[UILabel alloc] initWithFrame:CGRectMake(6,3, 262,20 )]; // RectMake(xPos,yPos,Max Width I want, is just a container value);

NSString * [email protected]"this is test this is test inthis is test ininthis is test inthis is test inthis is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...";

testLabel.text = test;
testLabel.numberOfLines = 0; //will wrap text in new line
[testLabel sizeToFit];

[self.view addSubview:testLabel];

Ответ 2

Вы можете найти размер текста с помощью:

CGSize textSize = [[myObject getALongText] 
                    sizeWithFont:[UIFont boldSystemFontOfSize:15] 
                    constrainedToSize:CGSizeMake(maxWidth, 2000)
                    lineBreakMode:UILineBreakModeWordWrap];

то вы можете создать свой UILabel следующим образом:

UILabel * lbl = [[UILabel alloc] initWithFrame:CGRectMake(0,0,textSize.width, textSize.height];
[lbl setNumberOfLines:0];
[lbl setLineBreakMode:UILineBreakModeWordWrap];
[lbl setText:[myObject getALongText]];

Ответ 3

В Swift:

testLabel = UILabel(frame: CGRectMake(6, 3, 262, 20))
testLabel.text = test
testLabel.numberOfLines = 0
testLabel.sizeToFit()

В Objective C

UILabel *testLabel = [[UILabel alloc] initWithFrame: CGRectMake(6, 3, 262, 20)]];
testLabel.text = test;
testLabel.numberOfLines = 0;
[testLabel sizeToFit];

Ответ 4

Если вы хотите изменить размер UILabel только по высоте, используйте это:

@property (nonatomic, weak) IBOutlet UILabel *titleLabel;

CGRect titleLabelBounds = self.titleLabel.bounds;
titleLabelBounds.size.height = CGFLOAT_MAX;
// Change limitedToNumberOfLines to your preferred limit (0 for no limit)
CGRect minimumTextRect = [self.titleLabel textRectForBounds:titleLabelBounds limitedToNumberOfLines:2];

CGFloat titleLabelHeightDelta = minimumTextRect.size.height - self.titleLabel.frame.size.height;
CGRect titleFrame = self.titleLabel.frame;
titleFrame.size.height += titleLabelHeightDelta;
self.titleLabel.frame = titleFrame;

Теперь вы можете использовать titleLabelHeightDelta для компоновки других видов в зависимости от размера вашей метки (без использования автозапуска).

Ответ 5

Я не уверен, что полностью понимаю этот вопрос, но вы можете использовать метод sizeToFit для UILabel (метод наследуется от UIView), чтобы изменить размер в соответствии с текстом метки.

Ответ 6

Самый простой способ найти нет. строк в зависимости от текста. Вы можете использовать этот код:

ceil(([aText sizeWithFont:aFont].width)/self.bounds.size.width-300); 

он возвращает некоторое значение float.

[lbl setNumberOfLines:floatvalue];

Ответ 7

Обратите внимание, что при автозапуске размер вызоваToFit не изменит размер, так как он будет изменен позже с помощью вычислений автоопределения. В этом случае вам нужно установить правильное ограничение высоты для вашего UILabel с значением "height >= xx".

Ответ 8

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

1) Создайте каталог с именем extensions и добавьте новый файл внутри UILabel.swift со следующим кодом:

import UIKit

extension UILabel {
    func resizeToText() {
        self.numberOfLines = 0
        self.sizeToFit()
    }
}

2) В коде приложения укажите нужную ширину метки и просто вызовите resizeToText():

label.frame.size.width = labelWidth
label.resizeToText()

Это будет поддерживать ширину при одновременном увеличении высоты.

Ответ 9

попробуйте код, он работает для многострочного

self.labelText.text = string;
self.labelText.lineBreakMode = NSLineBreakByWordWrapping;
self.labelText.numberOfLines = 0;

Ответ 10

Вы можете изменить размер метки в зависимости от длины строки, используя эту функцию

func ChangeSizeOfLabel(text:String) -> CGSize{

    let font = UIFont(name: "HelveticaNeue", size: 12)!
    let textAttributes = [NSFontAttributeName: font]
    let size = text.boundingRectWithSize(CGSizeMake(310, 999), options: .UsesLineFragmentOrigin, attributes: textAttributes, context: nil)
    let adjustSize = CGSizeMake(size.width, size.height)
    return adjustSize
}

и используйте его следующим образом:

let

showLabel.frame = CGRectMake(x, y, width , self.ChangeSizeOfLabel("Hello , Height is changing dynamically.....").height)