2012-07-04 2 views
0

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

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

У меня есть прокрутка, скажем, с 30 uibutton. (Например)

Если я должен был перечислить над на подвид и регистрировать кадры, нечетные один будет иметь кадр, который не был ожидаемый

Это происходит даже после того, как представление было обращено на экране

например

ViewDidLoad

[self.scrollVIew.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 

     UIButton* view = (UIButton*)obj; 

     NSLog(@"%@",NSStringFromCGRect(view.frame)); 



    }]; 

LOG:

4 +444516410617451515053691368888

2012-07-04 15: 46: 02,939 ОШИБКИ скроллер [2182: 707] {{29, 647}, {72, 37}}

2012-07-04 15: 46: 02,946 ОШИБКИ скроллер [ 2182: 707] {{119, 647}, {72, 37}}

2012-07-04 15: 46: 02.950 ПРОСМОТР ПРОПУСКА [2182: 707] {{219, 647}, {72, 37} }

2012-07-04 15: 46: 02,954 ОШИБКИ скроллер [2182: 707] {{313, 453}, {7, 7}}

Как можно видеть дно журнала показывает укомплектовать неправильное происхождение и размер фрейма.

Как ни странно, что когда-либо размер точки зрения я всегда, кажется, чтобы получить размер 7.

Это появляется воспроизводимость, но не отображается на экране

Что здесь происходит и как я могу избежать это происходит?

Благодаря Dan

ответ

1

Попробуйте вместо этого:

[self.scrollVIew.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
if([obj isKindOfClass:[UIButton class]]) 
{ 
     UIButton *currentButton = (UIButton *)obj; 
     NSLog(@"%@",NSStringFromCGRect(currentButton.frame)); 
} 
}]; 
+0

Спасибо, кажется, что uiscrollview имеет 2 изображения uiimageview внутри него. Странный. Ты знаешь почему? – Dan

+1

@ Dan Я действительно написал сообщение в блоге eons назад о том, почему это так. На самом деле это полосы прокрутки. Http: // wiresareobsolete.ком/WordPress/2010/03/UIScrollView-есть-а-секрет / – Devunwired

3

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

UIKIT_CLASS_AVAILABLE(2_0) @interface UIScrollView : UIView <NSCoding> { 
    ... 
    UIImageView* _verticalScrollIndicator; 
    UIImageView* _horizontalScrollIndicator; 

Один подход, чтобы избежать этой проблемы, чтобы просто проверить тип каждого подвид, прежде чем делать какие-либо работы:

[self.scrollVIew.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
if([obj isKindOfClass:[UIButton class]]) 
{ 
     UIButton *currentButton = (UIButton *)obj; 
     NSLog(@"%@",NSStringFromCGRect(currentButton.frame)); 
} 
}]; 

Поскольку каждый из UIImageViews, используемых для скроллинга имеет тег 0, то второй подход - пометить каждое из ваших представлений чем-то большим, чем ноль, и использовать его в качестве фильтра. Что-то в этом направлении должно работать:

[self.scrollVIew.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
UIView *view = obj; 
if(view.tag > 0) 
{ 
     NSLog(@"%@",NSStringFromCGRect(view.frame)); 
} 
}]; 
Смежные вопросы