检查 UView 是不是在 Self.View 范围内
Posted
技术标签:
【中文标题】检查 UView 是不是在 Self.View 范围内【英文标题】:Check if UView is inside Self.View bounds检查 UView 是否在 Self.View 范围内 【发布时间】:2014-02-05 00:37:55 【问题描述】:我有一个视图,其中包含一个设计为水平滚动的 UIScrollView。 (所以 UIScrollView 比 Self.View 宽度宽)
在 UIScrollView 内部,我有十几个 UILables,我让用户循环通过以编程方式添加值,当以编程方式选择下一个 UILable 时,如果它超出范围,我会更改 UIScrollViews 偏移量以确保 UILabel 只出现在视图右侧的左侧。
这就是我当前检查 UILabel 位置然后调整 UILabel 偏移量的方式。
if (positionLabel.frame.origin.x > self.view.frame.size.width)
[axisContainerScrollView setContentOffset:CGPointMake(positionLabel.frame.origin.x+40 - self.view.frame.size.width, axisContainerScrollView.frame.origin.y)
animated:YES];
else if (positionLabel.frame.origin.x > self.view.frame.size.width)
axisContainerScrollView setContentOffset:CGPointMake(0.0, axisContainerScrollView.frame.origin.y)
animated:YES];
所以 positionLabel 原点带回了它在 UIScrollView 内的位置值,然后我更改了 axisContainerScrollView 的偏移量。唯一的问题是,如果我滚动视图并选择一个 UILabel,其偏移量已经在视图内,如果将标签发送回右侧..
我想调整这个 if 语句,如果 UILabel 在 self.view 的范围内,那么我不想更改偏移量。
【问题讨论】:
【参考方案1】:您可以将positionLabel.frame的坐标空间转换为与self.view相同,然后可以使用CGRectContainsRect函数进行您想做的比较。
类似-
// convert label frame
CGRect comparisonFrame = [axisContainerScrollView convertRect:positionLabel.frame toView:self.view];
// check if label is contained in self.view
BOOL isContainedInView = CGRectContainsRect(self.view.frame, comparisonFrame);
现在你有了一个BOOL,你可以放在任何条件中,你可以用它来检查。
【讨论】:
您可能希望与 self.view.bounds 而不是 self.view.frame 进行比较。【参考方案2】:你看过[UIScrollView scrollRectToVisible:animated:]
吗?这可能是一种更优雅的方法来做你想做的事。如果矩形已经可见,我很确定它不会尝试滚动。
【讨论】:
好的,我现在会调查一下。我仍然觉得这不能解决我在 UILabel 已经在边界内时不滚动的问题。以上是关于检查 UView 是不是在 Self.View 范围内的主要内容,如果未能解决你的问题,请参考以下文章
uni-app_uView1.0 输入框里获得焦点时边框颜色改变,失去焦点后边框恢复原颜色
添加滚动视图时,所有视图都显示在导航栏后面的self.view顶部