使用 Autolayout Xcode6 在 Universal Storyboard 中相对于 UIImage 定位 UILabel
Posted
技术标签:
【中文标题】使用 Autolayout Xcode6 在 Universal Storyboard 中相对于 UIImage 定位 UILabel【英文标题】:Position UILabel relative to UIImage in Universal Storyboard using Autolayout Xcode6 【发布时间】:2015-03-14 08:46:59 【问题描述】:我正在实现一个自定义地图视图,我想在其中在 UIImage 上添加多个 UILabel。下面是视图层次结构:
当我在 iPhone 和 iPad 上预览它时,UILabel 保持相对于 SuperView,但我想保持它相对于 UIImage 中的点(x,y),这样无论设备是什么,标签都应该始终使用 Groovy房间。
我可以在 UIImage 上绘制文本,但在我的场景中这是一个非常昂贵的操作,因为我的视图将被加载一次并且我需要经常更新标签。
下面是当前的用户界面:
如图所示,标签不会留在 Groovy 房间中,而是会被挡住。
【问题讨论】:
【参考方案1】:您需要将 UILabel 固定到您希望它相对于布局的 UIImageView 的左前和顶部。将引脚偏移设置为您希望的相对 x 和 y。
cmets 后更新
如果您有一张会填满屏幕的大图像并且您想要定位多个标签,我认为您将不得不在代码中进行定位。我这么说的原因是,对于不同的屏幕尺寸,您需要更改图像的显示点。
建议是|
1) 为您的地图创建一个表格,其中包含每个房间中心的相对位置。例如。房间 1 的中心是 25% 横向和 10% 向下。然后放在一个数组中。现在,无论屏幕大小如何,您都可以定义每个房间的中心。
2) 在您的 viewDidLoad 方法中,创建您的 UILabel 并将它们放在一个按房间号索引的数组中。将标签添加到主视图。如果您有确切的数字并分配可以放入数组中的 IBOutlets,则可以在情节提要中执行此操作。
3) 实现 layoutSubviews 并在其中将每个标签的中心设置为房间的中心加上偏移量,使其显示在房间标签下方。先调用超级版。使用 UILabel 框架的 center 属性使这变得容易。在 layoutSubviews 中执行此操作应该可以解决系统自行添加的任何约束问题。
当您将标签位置编码为相对于图像时,这应该可以让您处理所有屏幕尺寸的标签。运行时,您正在将此相对位置转换为实际点。
【讨论】:
谢谢罗里,我会试试的。是否可以从情节提要本身做到这一点?以下是分别在 iPhone 和 iPad 上运行时图像和标签坐标的变化:标签 - 151, 114, 42, 21 和图像 - 0, 0, 375, 647苹果手机 |标签 - 151, 114, 42, 21 & 图片 - 0, 0, 768, 1004 iPad 如果是 UIImageView 就可以。不过,您似乎在谈论 UIImage 。要在视图中执行您需要的约束。 无法设置相对偏移量,您能帮忙吗? UIImage 大小会随着屏幕大小而变化,UIlabel 将如何落在图像的同一部分? 好的,我明白你现在在做什么了。您希望在一张充满屏幕的大图像上添加多个标签。更新了我的答案。 明白了!整个概念!谢谢!但我仍在努力寻找中心和横向/向下比率。 :|以上是关于使用 Autolayout Xcode6 在 Universal Storyboard 中相对于 UIImage 定位 UILabel的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xcode 6.3 中使用 AutoLayout 创建 ScrollView
如何使用 Autolayout 缩放 Xcode 6 上的按钮以适应不同的屏幕尺寸?