iPhone + UIScrollView
Posted
技术标签:
【中文标题】iPhone + UIScrollView【英文标题】: 【发布时间】:2009-12-08 09:43:00 【问题描述】:我在屏幕上有一个 UIScrollView。
滚动视图包含一个包含 UIButton 的视图。
问题是,在滚动视图时,如果我按下滚动视图之间的任何按钮,我的滚动视图将弹回屏幕顶部或底部,这意味着它不会保留在我按下按钮的位置。
【问题讨论】:
嘿伙计!你介意把注意力集中在你自己的问题上,并对我和艾伦给你的答案发表评论吗? 【参考方案1】:看看 UIScrollViewDelegate 类。您想禁用按钮,同时 滚动开始滚动完成后启用它。
【讨论】:
你就像某种心灵感应者,从第一张照片开始就猜测作者真正在说什么...... :) 我希望。 :) 更多的是“去过那里,做过那个”,不想看到其他人遇到这个问题。【参考方案2】:我已经重现了您在问题中描述的情况(至少我是这么认为的):一个 UIScrollView、一个 UIScrollView 内的 UIView 和一个 UIView 内的 UIButton。
我尝试点击滚动视图并在按钮上移动手指,但没有让它弹到顶部或类似的东西。我也尝试在滚动滚动后点击按钮,它也没有副作用。
所以我的猜测是你正在处理的是这样的:一个 UINavigationController 和你 UIScroll-UIView-UIButton UIViewController 作为根视图控制器;在被点击后,UIButton 将一个新的 UIViewController 推送到 UINavigationController;然后你回到 UINavigationController 堆栈中的前一个 UIViewController,这就是你失去滚动位置的时候。
如果我的猜测是正确的,那么这就是你需要做的。
在推送新的 UIViewController 之前,请使用以下代码保存滚动视图的当前内容偏移量:
[[NSUserDefaults standardUserDefaults] setObject:NSStringFromCGPoint(theScrollView.contentOffset) forKey:@"ScrollViewLastContentOffset"];
在您返回 UIScrollView UIViewController 后,在您的 viewWillAppear: 方法中使用以下代码:
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults stringForKey:@"ScrollViewLastContentOffset"] != nil)
theScrollView.contentOffset = CGPointFromString([defaults stringForKey:@"ScrollViewLastContentOffset"]);
[defaults removeObjectForKey:@"ScrollViewLastContentOffset"];
即使我的猜测错了,请对我和艾伦的回答发表评论并确认/反驳他们,以便我们能够帮助您。您是否介意提供有关您的问题的更多详细信息,这样我们就无需再猜测到底发生了什么。
【讨论】:
【参考方案3】:如果我理解正确,您的按钮在滚动视图内吗?当按下时,您希望他们停止滚动或将滚动视图移动到特定点?比如顶部还是底部?如果是这样,请使用 myScrollView.contentOffset = CGPointMake(0, 0);
并指定您需要的 x 和 y 值。因此,该示例中的 (0, 0) 将是左上角。
如果您想为这个过渡设置动画,您可能还想尝试[myScrollView setContentOffset:CGPointMake(0, 0) animated:YES];
。
【讨论】:
以上是关于iPhone + UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章
在 iphone 5 和 iphone 6 中动态设置字体大小