Текст из UITextView не отображается в UIScrollView - PullRequest
1 голос
/ 25 сентября 2008

Я хочу иметь UIScrollView с набором подпредставлений, где каждое из этих подпредставлений имеет UITextView с различным текстом. Для этой задачи я изменил пример PageControl из яблока "iphone dev center", чтобы добавить его к простому UITextView к представлению, которое используется для генерации подпредставлений представления прокрутки. Когда я запускаю приложение (как на симуляторе, так и на телефоне), НЕТ текста не видно, но если я активирую «взаимодействие с пользователем» и нажимаю на него, магически появляется текст (а также клавиатура).

Есть ли у кого-нибудь решение или какой-либо прогресс с UITextView внутри UIScrollView? Спасибо.

Ответы [ 6 ]

7 голосов
/ 05 мая 2011

Я решил проблему с использованием «поддельной» прокрутки:

textView.contentOffset = CGPointMake(0, 1);
textView.contentOffset = CGPointMake(0, 0);
2 голосов
/ 01 октября 2008

Я думаю, что проблема связана с тем фактом, что UITextView является подклассом UIScrollView, поэтому у вас есть встроенные представления прокрутки в UIScrollViews. Даже если текст отображается правильно, у вас могут возникнуть проблемы с удобством использования, так как неясно, будет ли считывание пальца прокручивать внешний вид или текстовый вид.

Да, Safari вроде как делает это, но это необходимо, и это не самая приятная часть использования Safari.

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

1 голос
/ 15 апреля 2009

Возможно, вы страдаете от проблемы, когда UITextView не обновляются должным образом, когда они прокручиваются с экрана за пределы экрана.

Проверьте раздел «Неэкранные обновления UITextView за пределами экрана» на этой странице: Несколько виртуальных страниц в UIScrollView

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

0 голосов
/ 30 ноября 2013

Мое решение этой проблемы было другим: оно работало, только когда я отключил свойство «Autoresize Subviews» UIScrollView.

[scrollView setAutoresizesSubviews:NO];
0 голосов
/ 15 апреля 2009

Возможно, проблема в следующем UIScrollViews.

Я думаю, что есть три решения:

  • Включение и отключение userInteractionEnabled при выборе различных элементов управления.
  • Предполагая, что текст статический, используйте UILabel вместо UITextView (UILabel не является подклассом UIScrollView)
  • Реализуйте свой собственный вид и нарисуйте текст самостоятельно в сообщении drawRect, а не полагайтесь на UITextView.
0 голосов
/ 15 апреля 2009

это работает для меня, помещая присвоение текстового значения в метод scrollViewDidScroll .

Примеры фрагментов:


SAMPLE.h

...
@interface myRootUIViewController : UIViewController <UIScrollViewDelegate>
...

Комментарий: Просто для запоминания: не забудьте протокол UIScrollViewDelegate.


SAMPLE.m

    - (void)viewDidLoad {
       ... whatever is created before and/or after...

       NSString * text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
                           Nunc semper lacus quis erat. Cras sapien magna, porta non, 
                           suscipit nec, egestas in, arcu. Maecenas sit amet est. 
                           Quisque felis risus, tempor eu, dictum ac, volutpat id, 
                           libero. Ut gravida, purus vitae interdum elementum, tortor 
                           justo porttitor nisi, id rhoncus massa.";

       // calculate the required frame height according to defined font size and
       // given text
       CGRect frame = CGRectMake(0.0, 500.0, self.view.bounds.size.width, 1000.0); 
       CGSize calcSize = [text sizeWithFont:[UIFont systemFontOfSize:13.0]
              constrainedToSize:frame.size lineBreakMode: UILineBreakModeWordWrap];
              // for whatever reasons, contraintedToSize seem only be able to
              // calculate an appropriate height if the input frame height is larger
              // than required. Means: if your text requires height=250 and input
              // frame height=100, then this method won't give you the expected
              // result.

       frame.size = calcSize;
       frame.size.height += 0; // calcSize might be not pixel-precise, 
                               // so add here additional padding pixels
       UITextView * tmpTextView = [[UITextView alloc]initWithFrame:frame];

       // do whatever adjustments
       tmpTextView.backgroundColor = [UIColor blueColor]; // show area explicitly (dev 
                                                          // purpose)
       self.myTextView = tmpTextView;
       self.myTextView.editable = NO;
       self.myTextView.scrollEnabled = NO;
       self.myTextView.multipleTouchEnabled = NO;
       self.myTextView.userInteractionEnabled = NO; // pass on events to parentview
       self.myTextView.font = [UIFont systemFontOfSize:13.0];
       [tmpTextView release];
       [self.scrollView addSubview:self.myTextView];
}

...

- (void)scrollViewDidScroll:(UIScrollView *)sender {
  // for simplicity text is repeated again, of course it can be a member var/etc...
  NSString * text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
                           Nunc semper lacus quis erat. Cras sapien magna, porta non, 
                           suscipit nec, egestas in, arcu. Maecenas sit amet est. 
                           Quisque felis risus, tempor eu, dictum ac, volutpat id, 
                           libero. Ut gravida, purus vitae interdum elementum, tortor 
                           justo porttitor nisi, id rhoncus massa.";
  self.myTextView.text = text; // assign value within this method and it is
                               // painted as expected.
    }

Комментарий:

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

Помещение фактического назначения текстового значения в метод scrollViewDidScroll работало для меня без каких-либо перепрошивок во время прокрутки и т. Д. (Пока что проверено только в iPhone Simulator).

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

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