固定分段控制的水平位置
Posted
技术标签:
【中文标题】固定分段控制的水平位置【英文标题】:Fixed horizontal position of Segmented Control 【发布时间】:2014-06-01 02:14:25 【问题描述】:我有一个 UIImageView(建筑物的楼层地图)和带有手势识别器的 UIScrollView,它们允许我水平和垂直滚动、放大/缩小。一切正常,但建筑物有两层,所以用户应该可以选择在它们之间切换。我决定在地图顶部使用分段控件来提供此选项。 如果我将 Segmented Control 放在同一个 UIScrollView 上,它会垂直滚动和水平滚动。我要问的是如何修复分段控件的水平位置,因此它只能使用地图垂直滚动。 我正在尝试使用此代码进行测试,它是否绝对修复了分段控件的位置,但似乎没有。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
CGRect frame = _floorSelector.frame;
frame.origin.y=50;
frame.origin.x= 160;
_floorSelector.frame = frame;
错在哪里?感谢您的回复!
【问题讨论】:
分段控件是否必须包含在滚动视图中?为什么不直接将它添加到滚动视图的顶部? 这可能是一个想法,但我试图让分段控制能够仅垂直滚动,而不是水平滚动。我附上屏幕截图以使其更易于理解。 pp.vk.me/c617220/v617220757/bdbc/JByJl-T53Bk.jpg 【参考方案1】:我认为这里的问题是您误解了滚动是如何在 UIScrollView
中实现的,以及事物是如何放置在其坐标空间中的。
当滚动UIScrollView
时,其子视图的框架不会改变。相对于滚动视图,它们保持在相同的位置,而滚动视图的contentOffset
和bounds
发生变化。为了使滚动视图的子视图在其其余部分滚动时显示为静态,您必须在边界更改时更改其在滚动视图中的框架。
考虑到这一点,您现在所做的只是在该子视图上重复设置相同的框架,这与什么都不做一样。
听起来你想做的是这样的:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
CGRect frame = _floorSelector.frame;
frame.origin.x = 160 + scrollView.contentOffset.x;
_floorSelector.frame = frame;
请注意,我不会更改 y 轴上的任何内容,因为根据您的问题,不需要更改垂直滚动。
【讨论】:
绝对!非常感谢!以上是关于固定分段控制的水平位置的主要内容,如果未能解决你的问题,请参考以下文章