ios - addSubview 改变一个对象在 scroll.subviews 中的索引

标签 ios objective-c uiscrollview scroll subview

我在循环 FOR 内的 UIScrollView 中添加了对象,但是在第二次交互之后 subviews 的索引发生了变化。

当我创建 ScrollView 时:

scroll.subviews :(
"<UIImageView: 0x147aeee0; frame = (1017 186; 7 5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x147aef50>>",
"<UIImageView: 0x147aefa0; frame = (1019 184; 5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x147af010>>"

)

在我使用 [scroll addSubview:btn];

进行循环后

首先

scroll.subviews :(
"<UIImageView: 0x147aeee0; frame = (1017 186; 7 5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x147aef50>>",
"<UIImageView: 0x147aefa0; frame = (1019 184; 5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x147af010>>",
"<ContentButton: 0x13fdc610; baseClass = UIButton; frame = (15 10; 221 173); opaque = NO; tag = 1; layer = <CALayer: 0x1034cc00>>"

)

第二个(将最后一个对象更改为索引 0)

scroll.subviews :(
"<ContentButton: 0x13fdc610; baseClass = UIButton; frame = (15 10; 221 173); opaque = NO; tag = 1; layer = <CALayer: 0x1034cc00>>",
"<UIImageView: 0x147aefa0; frame = (1019 184; 5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x147af010>>",
"<UIImageView: 0x147aeee0; frame = (1017 186; 7 5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x147aef50>>",
"<ContentButton: 0x105ddf70; baseClass = UIButton; frame = (246 10; 221 173); opaque = NO; tag = 149; layer = <CALayer: 0x105523e0>>"

)

第三次以此类推,对象会正常添加(在最后一个索引中)

scroll.subviews :(
"<ContentButton: 0x13fdc610; baseClass = UIButton; frame = (15 10; 221 173); opaque = NO; tag = 1; layer = <CALayer: 0x1034cc00>>",
"<UIImageView: 0x147aefa0; frame = (1019 184; 5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x147af010>>",
"<UIImageView: 0x147aeee0; frame = (1017 186; 7 5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x147aef50>>",
"<ContentButton: 0x105ddf70; baseClass = UIButton; frame = (246 10; 221 173); opaque = NO; tag = 149; layer = <CALayer: 0x105523e0>>",
"<ContentButton: 0x13f1dc80; baseClass = UIButton; frame = (477 10; 221 173); opaque = NO; tag = 3; layer = <CALayer: 0x13f1dd20>>"

)

问题出在第二次交互中,为什么最后一个对象(ContentButton)在索引 2 中并变为索引 0?

for (obj * objScroll in arrayChaObj)
    {                
        // UIButton
        ContentButton * btn = [[ContentButton alloc] initWithFrame:CGRectMake(btContentPosXChaObj,
                                                                    10,
                                                                    imgButtonScroll.size.width,
                                                                    imgButtonScroll.size.height)];

        btContentPosXChaObj += 10 + imgButtonScroll.size.width;
        [scroll addSubview:btn];

        NSLog(@"scroll.subviews :%@",scroll.subviews);
        [scroll setContentSize:CGSizeMake(btContentPosXChaObj, imgButtonScroll.size.height+10)];
    }

最佳答案

这只是一个大胆的猜测。

当您第一次调用 setContentSize: 时会发生什么?好吧,这两个 ImageView 最终都在内容区域之外。它们永远不会显示。

我想 scrollview 然后优化 subview 的顺序并将不可见的放在最后,这可能会改进其剪裁(重绘)功能。

目前我没有时间检查和实验,但这对我来说是一个合理的解释。

关于ios - addSubview 改变一个对象在 scroll.subviews 中的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14241392/

相关文章:

ios - UIScrollView 中的 UIViewControllers?

ios - 边界在带有内容插入的 UIScrollView 上自动更改

iphone - 使用 configure 和 make 为 iPhone 构建 OpenJpeg

ios - 如何在 Objective C 中正确使用接口(interface)作为 DTO

ios - 找不到调整两个 View 大小的数学公式

ios - Tesseract hOCR iOS

ios - 保存 DeviceToken 供以后在 Apple 推送通知服务中使用

ios - Facebook 共享对话框在哪个 iOS 中工作?

ios - 服务器端 swift Vapor - 重新定义模块错误

iphone - 手动滚动显示相同内容的两个 UICollectionView