2014-02-06 3 views
0

Если название ничего не говорит вам, вот что я узнал недавно и мне интересно: В моем приложении у меня есть UIScrollView с кнопками в нем. Все эти кнопки имеют один подъярус - экземпляр UILabel. Иногда возникает определенное событие, которое меняет текст в ярлыках, и мне также необходимо изменить кадр обеих меток и кнопок, чтобы можно было отобразить весь текст (он не будет усечен). Поэтому я просто захватил первое подразделение кнопки и проверил, сколько пространства нуждается в его тексте.Почему UIScrollView добавляет subviews UIImageView в свои подпрограммы при прокрутке

Это вызвало сбой, если это событие произошло во время прокрутки. Оказывается, что помимо метки каждая кнопка имела другое подзапрос, который был экземпляром UIImageView. Сначала я подумал, что во время прокрутки UIScrollView берет «скриншоты» своих подзонов и вроде ставит изображения сверху, так что анимация прокрутки несколько дешевле с точки зрения производительности. Однако эта логика является ошибочной, поскольку UIImageView был подвью под индексом 0, поэтому он был помещен ниже моих ярлыков.

Кто-нибудь знает, почему это происходит? Что инженеры Apple пытались достичь с помощью этого странного механика?

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

ответ

1

UIButtons есть UIImageView для фонового изображения (которое равно nil, пока вы не позвоните - (void)setImage:(UIImage *)image forState:(UIControlState)state или не установите его с помощью Interface Builder). Поэтому я бы предположил, что подвью под индексом 0 будет фоновым изображением, так как это будет сначала нарисовано ниже всего остального.

Что вы могли бы сделать, чтобы быть уверенным, что вы получаете UILabel, что вы ищете что-то вроде этого:

- (UILabel *)getLabelForButton:(UIButton *)button 
{ 
    for (id subView in button.subviews) 
    { 
     if ([subView isKindOfClass:[UILabel class]]) 
     { 
      return subView; 
     } 
    } 
    return nil; 
} 
+0

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

+0

Просто отредактировал мой ответ, чтобы дать вам предложение о том, чтобы вы только вытащили ярлык, чтобы вы не попали в объект, у которого на самом деле нет рамки. – sfeuerstein

+0

Я уже исправил это. Я просто задаю здесь вопрос о том, почему появляется изображение. Чисто из любопытства. – johnyu

Смежные вопросы