我们在项目中,经常会遇到IOS面面布局不对,感觉明明自己写对了,但是显示出来就是有问题。有什么办法能更好的找出问题呢?
利器之一,打印出该view的响应链关系。
#import "UIResponder+Debug.h"
@implementation UIResponder (Debug)
-(void)dumpResponderRerecursively{
UIResponder* nextResponder=self;
do {
NSLog(@"nextResponder is %@",nextResponder);
nextResponder=[nextResponder nextResponder];
} while (nextResponder);
}
@end
并在显示的地方调用该方法
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[_webview dumpResponderRerecursively];
}
run project. 从console得到log
2013-02-05 13:01:50.814 Taobao2013[6722:907] nextResponder is <UIWebView: 0x1f85ebf0; frame = (0 0; 320 548); layer = <CALayer: 0x1f85ebc0>>
2013-02-05 13:01:50.815 Taobao2013[6722:907] nextResponder is <UIView: 0x1f85efd0; frame = (0 20; 320 548); autoresize = W; layer = <CALayer: 0x1f85efa0>>
2013-02-05 13:01:50.816 Taobao2013[6722:907] nextResponder is <SearchHtml5ListController: 0x1f85fdc0>
2013-02-05 13:01:50.817 Taobao2013[6722:907] nextResponder is <UIView: 0x1f85f2e0; frame = (0 0; 320 548); clipsToBounds = YES; autoresize = W+H; animations = { position=<CABasicAnimation: 0x1f854540>; }; layer = <CALayer: 0x1f856c80>>
2013-02-05 13:01:50.818 Taobao2013[6722:907] nextResponder is <UIView: 0x1f8a8110; frame = (0 0; 320 548); autoresize = W+H; layer = <CALayer: 0x1f8a9c50>>
2013-02-05 13:01:50.818 Taobao2013[6722:907] nextResponder is <UIView: 0x1f8a46b0; frame = (0 0; 320 548); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x1f8a4710>>
2013-02-05 13:01:50.819 Taobao2013[6722:907] nextResponder is <NavigationController: 0x1edcbdb0>
2013-02-05 13:01:50.820 Taobao2013[6722:907] nextResponder is <UIView: 0x1f8a4480; frame = (0 0; 320 548); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x1f8aa490>>
2013-02-05 13:01:50.821 Taobao2013[6722:907] nextResponder is <UIView: 0x1f8a4200; frame = (0 0; 320 548); autoresize = W+H; layer = <CALayer: 0x1f8a4260>>
2013-02-05 13:01:50.822 Taobao2013[6722:907] nextResponder is <UIView: 0x1f896010; frame = (0 20; 320 548); autoresize = W+H; layer = <CALayer: 0x1f8961d0>>
2013-02-05 13:01:50.823 Taobao2013[6722:907] nextResponder is <MainViewController: 0x1edcb670>
2013-02-05 13:01:50.824 Taobao2013[6722:907] nextResponder is <UIWindow: 0x1f884b60; frame = (0 0; 320 568); layer = <UIWindowLayer: 0x1f8849d0>>
2013-02-05 13:01:50.825 Taobao2013[6722:907] nextResponder is <UIApplication: 0x1f86cc10>
2013-02-05 13:01:50.827 Taobao2013[6722:907] nextResponder is <AppDelegate: 0x1f872e30>
我们发现了,为什么webview的 在屏幕上偏移40的问题了,他的superview里面,有两个的origin.y是20,所以自己的偏移值是40了。