当 UIScrollView 在可见视图之外滚动按钮时更改 UIButton textLabel 位置
Posted
技术标签:
【中文标题】当 UIScrollView 在可见视图之外滚动按钮时更改 UIButton textLabel 位置【英文标题】:Change UIButton textLabel position when UIScrollView scrolls button outside of visible view 【发布时间】:2012-08-22 21:49:35 【问题描述】:我有一个有趣的场景,我有点想不通。我希望有人知道某种“UIButton+FloatingLabel”类别,或者可能只是我忽略的一些简单的东西。
我有一个水平滚动的 UIScrollView,里面有一堆不同宽度的按钮。我面临的问题是,当 UIButton 开始滚动到可见视图之外时,textLabel 随之而来(标签在按钮中是 leftAligned)。
我希望能够检测到这一点并将标签“浮动”在剩余按钮的视图中,直到整个按钮滚动离开。
我能想到的最接近的方法是覆盖 UIScrollView layoutSubviews
并在每次 contentOffset 更新时检查标签视图,但是如果有很多按钮,这可能会非常昂贵。
谁能提供一些指导或几个有用的链接?任何帮助表示赞赏,干杯!
【问题讨论】:
【参考方案1】:实现这一点的一种方法是将UIButton
子类化并在该子类中使用您自己的标签。然后覆盖您自定义的UIButton
的drawRect:
方法,以根据按钮在物理屏幕上的位置([UIScreen mainScreen]
)更改标签的位置。
希望这会有所帮助。
【讨论】:
感谢您的回复,但drawRect
只被调用一次(当按钮显示时)。我可以开始向setNeedsDisplay
发送垃圾邮件,但我认为这与我上面描述的layoutSubviews
方法一样低效。
是的,这是真的。我没有看到任何其他不详尽的方式。我说试试他们中的任何一个,看看他们的表现如何,你永远不会知道!
如果你想一想,你只需要调用setNeedsDisplay
到跨越屏幕边缘的按钮,我假设在任何给定时间它们不会太多吗?
我可以检查每个 UIButton 的 x
或 x+width
坐标是否在 UIScrollView 的框架之外,然后调用它。我主要担心的是我试图将其保持在最低限度以确保平滑滚动。我会试一试并最大化 UIButton 加载,看看会发生什么。以上是关于当 UIScrollView 在可见视图之外滚动按钮时更改 UIButton textLabel 位置的主要内容,如果未能解决你的问题,请参考以下文章