我有一个包含文本视图和图像视图的单元格的表格视图。我的项目目前正在使用 AutoLayout。我的目标是让图像视图在被点击时全屏显示。一种选择是使用模态视图控制器,但我希望这项工作有点像在 facebook 应用程序中点击图像的方式,应用程序使图像居中并淡化背景。
由于我使用的是自动布局,我不能简单地将图像视图的框架设置为填充屏幕。相反,我需要使用自动布局约束。我的图像视图有 5 个约束,一个约束设置与单元格底部的距离,以及左侧和右侧,以及一个控制图像高度的约束。最后一个是图像视图上方的文本视图和图像顶部之间的垂直空间约束。虽然这似乎与高度和底部约束相冲突,但出于某种原因,界面构建器迫使我这样做。为避免出现问题,我将此约束的优先级设置为小于 1000(无论如何,图像不应与 textview 重叠,因为已设置 tableview 单元格高度,因此一切都将完美契合)。
为了使图像居中,我将左右距离设置为零并移除垂直空间约束。为了使图像居中,我将底部空间约束替换为UIWindow的中心 y 对齐约束,而不是 tableviewcell。我想让它位于屏幕的中心,而不是单元格。
要获得主窗口,我使用这个:
AppDelegate* myDelegate = (((AppDelegate*) [UIApplication sharedApplication].delegate));
//access main window using myDelegate.window
然后,设置约束:
//currently sets the distance from the bottom of the cell to 14
//changing it...
[cellselected removeConstraint:cellselected.imagebottomspace];
cellselected.imagebottomspace = [NSLayoutConstraint constraintWithItem:cellselected.viewimage attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:myDelegate.window attribute:NSLayoutAttributeCenterY multiplier:0 constant:0];
[cellselected addConstraint:cellselected.imagebottomspace];
但是,这不起作用。图像视图的宽度和高度的变化适用得很好。但是,在读取 imagebottomspace 约束时,我得到了一个无法满足的布局——显然该约束与另一个约束冲突,该约束将底部和图像视图之间的距离设置为 14,这是我刚刚删除的约束。所以看起来它实际上并没有消除约束。
当我继续并让应用程序打破约束时,图像视图会移动,但会移动到错误的位置。它不在屏幕中央。它向上移动并离开屏幕。
显然我的做法是不对的。我究竟做错了什么?