2013-10-17 52 views
0

我想创建一个视图层次结构,当用户拉动滑块时,会从屏幕左侧“滑出”菜单。该菜单是作为一个表格与一堆细胞实现的。每个单元格都有一个图像和一个文本。我正在改变桌子大小的动画。由于我使用的自动布局,这里是我的代码:当动态调整表格大小时,UITableViewCell内容布局的奇怪行为

@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 

tableViewControllerUITableViewController一个非常基本的教科书实施。这些单元格创建如下:

UITableCell *cell = [[UITableCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 
cell.textLabel.text = @"Loren ipsum"; 
cell.imageView.image = [UIImage imageNamed:@"group"]; 

最初,我启动应用程序后,菜单创建为零宽度​​,因此被隐藏。当我然后拉动滑块时,整个事件就会很好地动画到指定的宽度(224)。下面是我的模拟器截图,动画中间的视图以及最终结果。

middle of animation - correct final result of animation

怪异的事情开始发生后,我的动画表回零号。标签上的文字向左滑动,变得部分被图像遮挡。下面是它的外观:

middle of animation - incorrect

从这一刻起,只要我动画菜单来回我一直在观察这个讨厌的效果。有没有人遇到类似的问题?有什么办法可以防止标签在动画中重新定位?任何有关如何在superview动画中重新布置子视图的良好文档的指针也将被赞赏。我已经在这个问题上撞了我的头几天了,什么都没发现。

回答

0

约束和/或调整大小的面具正在为你做。而不是做约束操作,将幻灯片菜单放在黑色视图后面,然后转换主视图(在这种情况下黑色来回)示例

if(isOpening) 
{ 
    mainView.transform = CGAffineTransformTranslate(mainView.transform, someValueToShiftRight, 0.0f); 
} 
else 
{ 
    mainView.transform = CGAffineTransformIdentity; 
} 
+0

此替代方法对我无效。我需要菜单滑出背景视图。否则,菜单右侧的功能(边距)将无法正确显示。 关于约束和面具 - 获得更多信息会很有趣。 UITableViewCell层次结构下没有任何限制(我将它们记录下来)。文本标签上的'autoresizingMask'默认为零,但将它设置为'UIViewAutoresizingFlexibleWidth'没有任何区别。 –

相关问题