1.原错误代码:
- (void)viewDidLoad {
_historyList = [[HistoryTableViewController alloc] init];
_historyList.view.frame = CGRectZero;
---这里中间代码省略---
NSLog(@"1.%@",NSStringFromCGRect(_historyList.view.frame));//这里的打印是正常的为{{0, 0}, {0, 0}}
}
点击按钮后_historyList.view.frame会改变,下面为按钮的响应方法
#pragma mark - 列表展开收缩
- (IBAction)ListUpOrDown:(id)sender {
NSLog(@"2.%@",NSStringFromCGRect(_historyList.view.frame));//这里打印是就变成错误的{{0, 0}, {55, 99}}
_historyList.isOpen = !_historyList.isOpen;
[_historyList.tableView reloadData];
_historyList.view.frame = CGRectMake(_DIDTextField.frame.origin.x, _DIDTextField.frame.origin.y+_DIDTextField.frame.size.height, _DIDTextField.frame.size.width, _historyList.tableView.contentSize.height);
NSLog(@"%f",_historyList.tableView.contentSize.height);
if (_historyList.isOpen == YES) {
[sender setImage:[UIImage imageNamed:@"dropup"] forState:UIControlStateNormal];
}
else{
[sender setImage:[UIImage imageNamed:@"dropdown"] forState:UIControlStateNormal];
}
}
2.调试过程
1.如果一开始viewDidLoad中设置如下
_historyList.view.frame = CGRectMake(_DIDTextField.frame.origin.x, _DIDTextField.frame.origin.y+_DIDTextField.frame.size.height, _DIDTextField.frame.size.width, 0);
点击之后ListUpOrDown打印的Fram高度还是99,宽度也比viewDidLoad中打印的大了几十
2.
- (void)viewDidAppear:(BOOL)animated{
NSLog(@"0.%@",NSStringFromCGRect(_historyList.view.frame));//这里打印还是错误的,高度还是99
}
3.发现错误:
默认的自动布局影响Fram
4.改正方法:
在viewDidLoad和viewDidAppear之间还有viewWillLayoutSubviews和viewDidLayoutSubviews,可以尝试在viewDidLayoutSubviews里设置一下frame
5.改正后代码:
- (void)viewDidLoad {
_historyList = [[HistoryTableViewController alloc] init];
_historyList.view.frame = CGRectZero;
---这里中间代码省略---
NSLog(@"1.%@",NSStringFromCGRect(_historyList.view.frame));//这里的打印是正常的为{{0, 0}, {0, 0}}
}
- (void)viewDidLayoutSubviews{
_historyList.view.frame = CGRectMake(_DIDTextField.frame.origin.x, _DIDTextField.frame.origin.y+_DIDTextField.frame.size.height, _DIDTextField.frame.size.width, _historyList.tableView.contentSize.height);
}
#pragma mark - 列表展开收缩
- (IBAction)ListUpOrDown:(id)sender {
NSLog(@"2.%@",NSStringFromCGRect(_historyList.view.frame));//这里打印是就变成错误的{{0, 0}, {55, 99}}
_historyList.isOpen = !_historyList.isOpen;
[_historyList.tableView reloadData];
NSLog(@"%f",_historyList.tableView.contentSize.height);
if (_historyList.isOpen == YES) {
[sender setImage:[UIImage imageNamed:@"dropup"] forState:UIControlStateNormal];
}
else{
[sender setImage:[UIImage imageNamed:@"dropdown"] forState:UIControlStateNormal];
}
}