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的主要内容,如果未能解决你的问题,请参考以下文章

android view怎么设置位置

《view programming guide for iOS 》之可以使用动画效果的属性

Android 怎么将fragment 动态地添加到布局中的任意位置?

IOS UILabe及UIFont用法总结

Android Scroll 分析

我想在iOS7的UI Scroll View中更改按位置绑定的大小[关闭]