iOS:根据 View 位置动态改变 UILabel Alignment
Posted
技术标签:
【中文标题】iOS:根据 View 位置动态改变 UILabel Alignment【英文标题】:iOS: Dynamically change UILabel Alignment based on View position 【发布时间】:2014-11-14 09:57:47 【问题描述】:我有一个 UIView,其中包含一个较小的 UIView。较小的 UIView 内部有 2 个标签,一个在另一个之上。
这些标签的宽度取决于用户输入的内容。然后对较小的 UIView 进行相应的调整。
用户可以使用平移手势在屏幕上移动较小的 UIView。
我正在努力研究如何根据较小的 UIView 在主视图中的位置动态更改 UILabel 对齐方式。
例如,我的主 UIView 是 1,000 像素,而较小的 UIView 是 400 像素。如果他们把它拖到中间我怎么解决?
我想我应该从 1,000 中减去 400,这将给我 600 个像素,然后将其分成三部分(左对齐、居中对齐和右对齐),最后检查较小 UIView 的中心是否在其中之一内这些乐队,但我似乎无法让它工作。
有人可以就如何设置提供一些建议吗?我动态需要它,因为用户可以使用 iPhone / iPad / Portrait / Landscape 等。
希望这很清楚。
【问题讨论】:
【参考方案1】:当用户触摸屏幕时,如果他们正在触摸您的动态标签,请检查动态标签 center.x 位置并查看它在其超级视图(第二视图)中的哪个扇区。将第二个视图的宽度分成 3 个部分。如果您的动态标签 center.x 在第一部分,请将标签文本 NSTextAlignment 更改为 Left,第二个 - NSTextAlignment 为 Center,第三个 - NSTextAlignment 为 Right
【讨论】:
【参考方案2】:我最初是在尝试 Valentin 的解决方案,但是标签在对齐之前会离开屏幕。
原来我必须考虑到视图的大小,然后将剩余空间除以 3。显然,如果标签很长,那么中间的公差很小,如果标签很小,那么他们必须移动它进一步。
这里是handlePan手势的粗略代码:
println("C : \(viewTop.center.x)")
let viewWidth:CGFloat = viewTop.frame.size.width
let marginL:CGFloat = (viewWidth/2) + ((self.frame.size.width - viewWidth) / 3)
println("L : \(marginL)")
let marginR:CGFloat = (viewWidth/2) + (((self.frame.size.width - viewWidth) / 3) * 2)
println("R : \(marginR)")
if viewTop.center.x < marginL
println("leftAlign")
else if (viewTop.center.x >= marginL) && (viewTop.center.x <= marginR)
println("centerAlign")
else
println("rightAlign")
【讨论】:
以上是关于iOS:根据 View 位置动态改变 UILabel Alignment的主要内容,如果未能解决你的问题,请参考以下文章
《view programming guide for iOS 》之可以使用动画效果的属性