Я создаю UITextView, добавляю к нему текст и помещаю его в представление (с контейнером)
UITextView *lyricView = [[UITextView alloc] initWithFrame:screen];
lyricView.text = [NSString stringWithFormat:@"\n\n%@\n\n\n\n\n\n", lyrics];
[container addSubview:lyricView];
[self.view addSubview:container];
Затем я получаю его размер для использования с кнопкой и добавляю его в UITextView
CGRect size = [lyrics boundingRectWithSize:CGSizeMake(lyricView.frame.size.width, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[lyricView font]}
context:nil];
UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[doneButton setFrame:CGRectMake(56, size.size.height + 55, 208, 44)];
[doneButton setTitle:@"Done" forState:UIControlStateNormal];
[lyricView addSubview:doneButton];
Это работает в большинстве случаев. Это будет уважать \n разрывы строк (например, я добавил в свой stringWithFormat), но он не будет уважать переносы слов, автоматически добавляемые текстовым представлением. Поэтому, если lyrics
имеет строку, которая не помещается на экране, UITextView будет ее обертывать (как и предполагалось), но size
теперь немного короче, чем это должно быть, потому что это не соответствовало переносу текстового представления.