사용이 범주 :
의 UIView + LogViewHierarchy.h
#import <UIKit/UIKit.h>
@interface UIView (LogViewHierarchy)
-(void) logViewHierarchy;
@end
의 UIView + LogViewHierarchy.m
#import "UIView+LogViewHierarchy.h"
@implementation UIView (LogViewHierarchy)
-(void) logViewHierarchy
{
NSLog(@"%@%@", NSStringFromClass(self.class), NSStringFromCGRect(self.frame));
[self logSubviews:self depth:1];
}
-(void) logSubviews:(UIView*)view depth:(NSInteger)depth
{
for (UIView *subview in view.subviews) {
if ([subview isKindOfClass:[UIScrollView class]]) {
NSLog(@"%@%@%@ - scrollsToTop: %@", [self paddingString:depth], NSStringFromClass(subview.class), NSStringFromCGRect(subview.frame), ((UIScrollView*)subview).scrollsToTop ? @"YES" : @"NO");
} else {
NSLog(@"%@%@%@", [self paddingString:depth], NSStringFromClass(subview.class), NSStringFromCGRect(subview.frame));
}
[self logSubviews:subview depth:depth+1];
}
}
-(NSString*) paddingString:(NSInteger)depth
{
return [@"" stringByPaddingToLength:depth*2 withString:@" " startingAtIndex:0];
}
@end
그런 다음 앱의 루트 뷰 컨트롤러를 찾아 추가
-(void) viewDidAppear:(BOOL)animated
{
[self.view logViewHierarchy];
}
당신은 모든 UIScrollViews과 scrollsToTop
속성을 볼 수 있습니다. scrollsToTop == YES
이있는 UIScrollView가 하나만있는 것처럼 출력물을 만들면 scrollsToTop 제스처가 정상적으로 작동합니다.
내 경우에 logViewHierarchy
은 모든 스크롤보기에 scrollsToTop = NO
이 있다고보고했으며 사용자가 명시 적으로 YES
으로 설정했기 때문에 이유를 알지 못했습니다. 내 프로젝트에 this UIScrollView category을 남겨 뒀다는 것이 밝혀졌으며, 모든 UIScrollViews에서 일부 메소드가 오버로드되었습니다. 프로젝트에서 해당 카테고리를 제거하면 logViewHierarchy
에서 올바른 결과를 얻을 수있었습니다. 그런 다음 코드 하나로 놀아서 scrollsToTop = YES
한 개만 얻습니다.
코드를 여기에 게시하십시오. –
그냥 인터페이스 빌더입니다 ..... –