我有一个CustomScrollView,它包含一个UILabel列表并滚动它们(子类用于自动定位视图)。在类中,我有一个存储为NSMutableArray的视图列表。我发现当我从数组中获取标签后请求label.view.frame.origin时,我总是得到{0,0}。因此,我用来滚动的逻辑不起作用(滚动是以编程方式完成的)。我试图让UILabel滚动到CustomScrollView框架的中心。这是一个代码示例,用于显示我遇到问题的位置:
@interface CustomScrollView : UIScrollView
@property (nonatomic) NSMutableArray* labels; //This is the array of UILabels
@end
@implementation CustomScrollView
-(void)scrollToIndex:(int)index withAnimation:(bool)animated
{
UILabel *label = (UILabel*)self.labels[index];
CGRect rect = CGRectMake(label.frame.origin.x - ((self.frame.size.width - label.frame.size.width) / 2), 0, self.frame.size.width, self.frame.size.height);
[self scrollRectToVisible:rect animated:animated];
}
@end
TL:DR - label.frame.origin.x返回0而不是它在superview中的相对位置。 奖金 - 每当我实例化我的自定义滚动视图时,它会自动添加两个子视图,我不知道它来自哪里。我设置背景颜色并关闭滚动条并启用滚动。
提前感谢您的帮助。
编辑[Jun 25 11:38] - 关闭我正在创建滚动的矩形是正确的,但是调用[self scrollRectToVisible:rect animated:animated]只是不起作用。
编辑[Jun 25 12:04] - 这是我每次添加子视图时调用的方法
-(UILabel*)lastLabel
{
if (self.labels.count == 0)
return nil;
return (UILabel*)self.labels.lastObject;
}
-(void)adjustContentSize
{
if (self.labels.count > 0)
{
float lastModifier = [self lastLabel].frame.origin.x + [self lastLabel].frame.size.width + ((self.frame.size.width - [self lastLabel].frame.size.width) / 2);
self.contentSize = CGSizeMake(MAX(lastModifier, self.contentSize.width), self.frame.size.height);
}
}
答案 0 :(得分:2)
尝试使用convertRect函数:
CGRect positionOfLabelInScrollView = [self.scrollView convertRect:myLabel.frame toView:nil];
[self.scrollView setContentOffset:CGPointMake(0, topOfLabel - positionOfLabelInScrollView.origin.y + positionOfLabelInScrollView.size.height) animated:YES];
这应滚动您的scrollView以显示标签。