【发布时间】:2014-01-23 07:09:30
【问题描述】:
我有一个 NavigationControllers A 和一个 UIViewController B 。 A 有一个标签,其下方是 UITableView。当从 A 导航到 B 并从 B 导航回 A 时,我重新构建了标签和表格视图。我尝试通过 ViewWillAppear 方法中的代码设置框架。然而我没有它的确切框架。我在这里缺少什么基本的东西?
[self.labelUser setFrame:CGRectMake(71, 73, 179, 20)];
[self.customersTable setFrame:CGRectMake(0, 102, 320, 421)];
正在使用自动布局。但我无法解决这个问题。我已经附上了相同的图片
![在此处输入图像描述][2] ![在此处输入图像描述][3]
编辑:KVO 代码检查帧值并将帧改回原来的值
在 ViewDidLoad 中
[labelUser addObserver:self forKeyPath:@"frame" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:NULL];
然后
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([keyPath isEqual:@"frame"]) {
NSLog(@"changed %@ %@", NSStringFromCGRect(labelUser.frame), NSStringFromCGRect(customersTable.frame));
if (![NSStringFromCGRect(labelUser.frame) isEqual:NSStringFromCGRect(CGRectMake(71, 73, 179, 20))]) {
[labelUser removeObserver:self forKeyPath:@"frame"];
[self.labelUser setFrame:CGRectMake(71, 73, 179, 20)];
[self.customersTable setFrame:CGRectMake(0, 102, 320, 421)];
}
}
}
像这样推送视图
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"segueToOrd" sender:self];
}
也尝试了KVO方法..但没有运气...有什么建议吗??
故事板图片
【问题讨论】:
-
你用的是xib还是storyboard?
-
如果我是你,我会使用键值观察来观察标签的框架。
-
嗨,我试过了,发现在导航过程中高度发生了变化。不知道为什么,但我尝试再次重新构建它并不起作用..
-
设置断点,你会看到调用堆栈。它说什么?您还可以打印旧值和新值。
-
我已经打印了新旧值...旧值 {{71, 73}, {179, 20}} 更改了新值是 {{71, 73}, {179, 0}} ...我将添加我对问题所做的代码..请检查编辑
标签: ios iphone uitableview uilabel cgrectmake