当 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 子类化并在该子类中使用您自己的标签。然后覆盖您自定义的UIButtondrawRect: 方法,以根据按钮在物理屏幕上的位置([UIScreen mainScreen])更改标签的位置。

希望这会有所帮助。

【讨论】:

感谢您的回复,但drawRect 只被调用一次(当按钮显示时)。我可以开始向setNeedsDisplay 发送垃圾邮件,但我认为这与我上面描述的layoutSubviews 方法一样低效。 是的,这是真的。我没有看到任何其他不详尽的方式。我说试试他们中的任何一个,看看他们的表现如何,你永远不会知道! 如果你想一想,你只需要调用setNeedsDisplay 到跨越屏幕边缘的按钮,我假设在任何给定时间它们不会太多吗? 我可以检查每个 UIButton 的 xx+width 坐标是否在 UIScrollView 的框架之外,然后调用它。我主要担心的是我试图将其保持在最低限度以确保平滑滚动。我会试一试并最大化 UIButton 加载,看看会发生什么。

以上是关于当 UIScrollView 在可见视图之外滚动按钮时更改 UIButton textLabel 位置的主要内容,如果未能解决你的问题,请参考以下文章

当键盘可见时,UIScrollView滚动到按钮

检测 UIScrollView 之外的点击

在滚动视图的可见区域之外创建的视图上的触摸事件

如何在故事板中设计 UIScrollView

带有自动布局的 UIScrollView:后代在查看区域之外,但视图不滚动

键盘可见的 UIScrollView