我遇到了同样的问题,我开始考虑查看这两个UIImageView
s 的值,以确定它们是否存在。他们确实有一个非常独特的签名:
<UIImageView: 0x8ab3e00; frame = (313 812.5; 7 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x8ab9740>>
<UIImageView: 0x8ab3e90; frame = (314.5 522; 3.5 341); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x8ab3f20>>
在您可以听的其他钩子中。不理想,但在这一点上的选择方式不多......
这是一个例子。在这种情况下,我在滚动视图的子视图中循环,以根据子视图找出滚动视图的最佳contentSize
高度,当它开始出现一些时髦的值时,这让我认为是滚动条在搞砸我.. .
CGRect contentRect = CGRectZero;
for (UIView *view in self.myScrollView.subviews) {
//exclude scroll bars, the width/height is 3.5 for non-retina or 7
//for retina. you can put some logic in here if you like to check
//the appropriate 3.5/7.0 values for the respective screen densities
if(view.frame.size.width > 7.0f && view.frame.size.height > 7.0f) {
contentRect = CGRectUnion(contentRect, view.frame);
}
}
container.contentSize = CGSizeMake(container.contentSize.width, contentRect.size.height);
如果检查每个 UIView 的框架对您来说不够具体,您还可以确保它是一个 UIImageView。
我认为这是目前唯一的“真正”解决方案。我个人宁愿不必维护另一组观点。
编辑:
这是我使用的综合方法:
-(bool)isProbablyAScrollBar:(UIView*)view {
CGFloat screenScale = [[UIScreen mainScreen] scale];
return (([view isKindOfClass:[UIImageView class]]) && (view.frame.size.width <= (screenScale*3.5f) || view.frame.size.height <= (screenScale*3.5f)));
}