iOS自动布局 – 将位于tableviewcell内的视图移动到屏幕中心

iOS自动布局 – 将位于tableviewcell内的视图移动到屏幕中心,第1张

概述我有一个包含文本视图和图像视图的单元格的tableview.我的项目目前正在使用AutoLayout.我的目标是在点击时将图像视图全屏显示.一个选项是使用模态视图控制器,但我想让这项工作有点像在Facebook应用程序中点击图像的方式工作,应用程序使图像居中并淡化背景. 由于我使用autolayout,我不能简单地设置imageview的框架来填充屏幕.相反,我需要使用自动布局约束.我的图像视图有 我有一个包含文本视图和图像视图的单元格的tablevIEw.我的项目目前正在使用autoLayout.我的目标是在点击时将图像视图全屏显示.一个选项是使用模态视图控制器,但我想让这项工作有点像在Facebook应用程序中点击图像的方式工作,应用程序使图像居中并淡化背景.

由于我使用autolayout,我不能简单地设置imagevIEw的框架来填充屏幕.相反,我需要使用自动布局约束.我的图像视图有5个约束,约束设置距单元格底部的距离,以及左侧和右侧,以及控制图像高度的约束.最后一个是图像视图上方的文本视图和图像顶部之间的垂直空间约束.虽然这似乎与高度和底部约束相冲突,但由于某种原因,界面构建器迫使我有这个.为了避免出现问题,我将此约束的优先级设置为小于1000(无论如何,图像永远不会与textvIEw重叠,因为tablevIEw单元格高度设置为所有内容都完全适合).

为了使图像居中,我将左右距离设置为零,并删除垂直空间约束.为了使图像居中,我将带有中心y对齐约束的底部空间约束替换为UIWindow而不是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,这是我刚刚删除的约束.所以它似乎并没有实际删除约束.

当我继续让app破坏约束时,imagevIEw会移动,但会移动到错误的位置.它不在屏幕中心.它向上移动并离开屏幕.

显然我正在做的事情是不对的.我究竟做错了什么?

解决方法 所以我想你想要这样的东西:

首先,您需要知道从Xcode 4.6.3开始,在表视图单元格中设置约束时,nib编辑器(“Interface Builder”)存在错误.它应该在子视图和单元格的内容视图之间创建约束,而是在子视图和单元格本身之间创建约束.这往往会在运行时搞砸布局. (此错误在Xcode 5及更高版本中得到修复.)

这样做的结果是你应该删除nib中的所有约束并在代码中重新创建它们,或者只是去除nib并在代码中创建单元格的整个视图层次结构.

其次,有一种更简单的方法来进行图像缩放.这是选择单元格时的基本过程:

>将选定单元格的图像视图边界转换为顶级视图坐标系中的CGRect.
>创建一个仅用于缩放的新图像视图,并将其框架设置为该CGRect.将其userInteractionEnabled设置为YES.将其autoresizingMask设置为灵活的宽度和高度.添加点按手势识别器.
>将新图像视图添加为顶级视图的子视图.
>将单元格的图像视图的隐藏属性设置为YES.
>在动画块中,将新图像视图的帧设置为顶级视图的边界.
>禁用表格视图的panGestureRecognizer.

点击新图像视图时,请执行以下步骤:

>将选定单元格的图像视图边界转换为顶级视图坐标系中的CGRect.
>在动画块中,将缩放图像视图的帧设置为该CGRect.
>在动画完成块中:

>从超视图中删除缩放的图像视图.
>将单元格的图像视图的隐藏属性设置为NO.
>启用表格视图的panGestureRecognizer.

由于您没有移动原始图像视图,因此您不必混淆其约束.隐藏的视图仍然参与布局.

由于您是在代码中创建新的图像视图,因此默认情况下它会将“自动调整大小的任务设置”设置为“是”.这意味着您可以设置其框架.自动布局将自动将框架转换为约束.

您可以在this github repository中找到完整的源代码.

总结

以上是内存溢出为你收集整理的iOS自动布局 – 将位于tableviewcell内的视图移动到屏幕中心全部内容,希望文章能够帮你解决iOS自动布局 – 将位于tableviewcell内的视图移动到屏幕中心所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1056764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存