gpt4 book ai didi

iphone - UIScrollview subview 在枚举时显示不正确的帧

转载 作者:行者123 更新时间:2023-11-28 19:17:12 24 4
gpt4 key购买 nike

大家好,我有一个问题我无法理解。

我已经将这个问题分解到它自己的项目中,我仍然可以重现它。

我有一个 scrollview 说有一个 30 uibutton 布局。 (例如)

如果我要枚举 subview 并记录帧,奇数将有一个未预期的帧

即使在屏幕上绘制了 View ,也会发生这种情况

例如

ViewDidLoad

 [self.scrollVIew.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

UIButton* view = (UIButton*)obj;

NSLog(@"%@",NSStringFromCGRect(view.frame));



}];

LOG:

2012-07-04 15:46:02.939 BUG SCROLLER[2182:707] {{29, 647}, {72, 37}}

2012-07-04 15:46:02.946 BUG SCROLLER[2182:707] {{119, 647}, {72, 37}}

2012-07-04 15:46:02.950 BUG SCROLLER[2182:707] {{219, 647}, {72, 37}}

2012-07-04 15:46:02.954 BUG SCROLLER[2182:707] {{313, 453}, {7, 7}}

如您所见,底部日志显示了完全不正确的帧来源和大小。

奇怪的是,无论 View 的大小如何,我似乎总是得到 7 的大小。

这看起来可重现,但在屏幕上不可见

这是怎么回事,我怎样才能避免它发生?

谢谢丹

最佳答案

UIScrollView 有两个 UIImageView subview ——水平和垂直滚动指示器各一个。您将需要排除这些 View 以获得您正在寻找的帧值。

UIKIT_CLASS_AVAILABLE(2_0) @interface UIScrollView : UIView <NSCoding> {
...
UIImageView* _verticalScrollIndicator;
UIImageView* _horizontalScrollIndicator;

避免此问题的一种方法是在执行任何工作之前简单地检查每个 subview 的类型:

[self.scrollVIew.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if([obj isKindOfClass:[UIButton class]])
{
UIButton *currentButton = (UIButton *)obj;
NSLog(@"%@",NSStringFromCGRect(currentButton.frame));
}
}];

由于用于滚动条的每个 UIImageViews 都有一个标记 0,第二种方法是用大于零的值标记每个 View 并将其用作过滤器。按照这些思路应该可以工作:

[self.scrollVIew.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
UIView *view = obj;
if(view.tag > 0)
{
NSLog(@"%@",NSStringFromCGRect(view.frame));
}
}];

关于iphone - UIScrollview subview 在枚举时显示不正确的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11331448/

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