gpt4 book ai didi

ios - 获取 Frame 在 ScrollView 中的 X 位置

转载 作者:行者123 更新时间:2023-11-28 22:04:12 25 4
gpt4 key购买 nike

我有一个 CustomScrollView,它包含一个 UILabel 列表并滚动浏览它们(子类化用于 View 的自动定位)。在类里面,我将这些 View 的列表存储为 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 而不是它在 super View 中的相对位置。奖励——每当我实例化我的自定义 ScrollView 时,它会自动添加两个我不知道它们来自哪里的 subview 。我设置了背景颜色并关闭了滚动条并启用了滚动。

在此先感谢您的帮助。

编辑 [6 月 25 日 11:38] - 原来我创建的滚动矩形是正确的,但调用 [self scrollRectToVisible:rect animated:animated] 只是不起作用。

编辑 [6 月 25 日 12:04] - 这是我每次添加 subview 时调用的方法

-(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);
}
}

最佳答案

尝试使用 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 以显示标签。

关于ios - 获取 Frame 在 ScrollView 中的 X 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24412977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com