我正在尝试使用菜单创建视图层次结构,当用户拉动滑块时,该菜单将从屏幕左侧“滑出”。菜单实现为带有一堆单元格的表格。每个单元格都有一个图像和一个文本。我正在为表格大小的更改设置动画。当我使用自动布局时,这是我的代码:
@interface MyController : UIViewController {
CGFloat size;//0 .. self.frame.size.width * drawerPortion
NSLayoutConstraint *constraint;
UITableViewController *tableViewController;
}
// ...
@end
@implementation MyController
- (void)viewDidLoad {
//...
UIView *view = tableViewController.view;
[self.view addSubview:view];
constraint = [NSLayoutConstraint constraintWithItem:view
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:0];
[view addConstraint:constraint];
[self redrawTable];
}
- (void)makeDrawerVisible:(BOOL)visible {
size = visible ? 224 : 0;
[UIView animateWithDuration:0.5
delay:0
options:UIViewAnimationOptionLayoutSubviews
animations:^{[self redrawTable];}
}];
}
- (void)redrawTable {
constraint.constant = size;
[self.view layoutIfNeeded];
}
// ...
@end
这tableViewController
是一个非常基本的教科书实现UITableViewController
。创建单元格如下:
UITableCell *cell = [[UITableCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
cell.textLabel.text = @"Loren ipsum";
cell.imageView.image = [UIImage imageNamed:@"group"];
最初,在我启动应用程序后,菜单以零宽度创建,因此被隐藏。然后当我拉动滑块时,整个物体的动画效果很好地达到了指定的宽度 (224)。这是我的模拟器的屏幕截图,动画中间的视图是最终结果。
在我将表格设置为零后,奇怪的事情开始发生。标签上的文字向左滑动,部分被图像遮挡。这是它的外观:
从这一刻起,只要我来回为菜单设置动画,我就会一直观察这种讨厌的效果。有没有人遇到过类似的问题?有什么方法可以防止标签在动画期间重新定位?任何关于在超级视图动画期间如何重新布局子视图的良好文档的指针也将不胜感激。几天来,我一直在努力解决这个问题,但一无所获。