Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用动画调整表格大小时UITableViewCell内容布局的奇怪行为_Ios - Fatal编程技术网

Ios 使用动画调整表格大小时UITableViewCell内容布局的奇怪行为

Ios 使用动画调整表格大小时UITableViewCell内容布局的奇怪行为,ios,Ios,我正在尝试创建一个视图层次结构,其中包含一个菜单,当用户拉动滑块时,该菜单将从屏幕左侧“滑出”。菜单被实现为一个包含一组单元格的表格。每个单元格都有一个图像和一个文本。我正在设置表格大小更改的动画。由于我正在使用autolayout,以下是我的代码: @interface MyController : UIViewController { CGFloat size;//0 .. self.frame.size.width * drawerPortion NSLayoutConst

我正在尝试创建一个视图层次结构,其中包含一个菜单,当用户拉动滑块时,该菜单将从屏幕左侧“滑出”。菜单被实现为一个包含一组单元格的表格。每个单元格都有一个图像和一个文本。我正在设置表格大小更改的动画。由于我正在使用autolayout,以下是我的代码:

@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)。下面是我的仿真器的截图,动画中间的视图,最后的结果。

在我将表格动画设置回零大小后,奇怪的事情开始发生。标签上的文本向左滑动,部分被图像遮挡。下面是它的外观:


从这一刻起,只要我来回设置菜单的动画,我就会不断观察到这种令人讨厌的效果。有没有人遇到过类似的问题?是否有任何方法可以防止标签在动画期间重新定位?对于在superview动画期间如何重新布置子视图的良好文档,也将非常感谢。我已经就这个问题绞尽脑汁好几天了,但什么也没找到。

约束和/或调整大小的掩码正在对您造成影响。将幻灯片菜单放在黑色视图后面,然后变换主视图(在本例中为黑色视图)示例,而不是执行约束操纵


这种变通方法对我不起作用。我需要菜单滑出背景视图的顶部。否则,菜单右侧的功能(边距)将无法正确显示。关于约束和遮罩-获得更多关于这方面的信息会很有趣。在
UITableViewCell
层次结构下没有任何约束(我正在记录它们)。默认情况下,文本标签上的
autoresizingMask
为零,但将其设置为
UIViewAutoresizingFlexibleWidth
不会产生任何差异。
if(isOpening)
{
    mainView.transform = CGAffineTransformTranslate(mainView.transform, someValueToShiftRight, 0.0f);
}
else
{
    mainView.transform = CGAffineTransformIdentity;
}