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

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

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

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

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

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

Метод 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]; 

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

 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]]; 

В Свифт:

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

В Цель C

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

Если вы хотите изменить размер 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 для компоновки других представлений в зависимости от размера вашей метки (без использования автозапуска).

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

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

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

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

 [lbl setNumberOfLines:floatvalue]; 

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

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

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

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

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

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

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

попробуйте bellow code, он работает для многострочных

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

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

 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 } 

и используйте его так:

позволять

 showLabel.frame = CGRectMake(x, y, width , self.ChangeSizeOfLabel("Hello , Height is changing dynamically.....").height) 
  • Вставлять текст в UITextView программно, не перемещая позицию каретки.
  • Начальное отставание для ячейки с UITextView
  • UITextView - настройка размера шрифта attribitedText медленно?
  • UITextView Вращение и масштабирование IOS
  • Сохранять текст в UITextView при отключении popover
  • Отключить горизонтальное прокрутку для UIPageViewController (за исключением краев)
  • UITextView contentInset не работает в UITextView на iOS 7?
  • Первый текст UITextview не отображается
  • Отображение клавиатуры и курсора, но я не могу вводить внутри UITextFields и UITextViews
  • UITextView завершил выбор изменений
  • Как обнаружить отстыку, док или разделение нажата на iPad (iOS 5)
  • Давайте будем гением компьютера.