如果标题没有告诉你什么,这是我最近发现的并且好奇: 在我的应用程序中,我有一个带按钮的UIScrollView。这些按钮每个都有一个子视图 - UILabel的一个实例。有时触发的特定事件会更改标签中的文本,我还需要更改标签和按钮的框架,以便显示整个文本(不会被截断)。所以我抓住了按钮的第一个子视图并检查了它的文本需要多少空间。
如果在滚动期间发生该事件,则会导致崩溃。事实证明,除了标签之外,每个按钮还有另一个子视图,它是UIImageView的实例。起初我认为在滚动过程中,UIScrollView会获取其子视图的“屏幕截图”,并将图像置于顶部,这样动画滚动在性能方面稍微便宜一些。然而,这个逻辑是有缺陷的,因为UIImageView是索引0处的子视图,所以它被放在我的标签下面。
任何人都知道为什么会这样?苹果工程师用这种奇怪的机制试图实现什么目标?
请注意,实际上它可能仅适用于按钮。此外,我检查了标签,他们没有任何子视图。
答案 0 :(得分:1)
UIButtons
背景图片UIImageView
(nil
,直到您调用- (void)setImage:(UIImage *)image forState:(UIControlState)state
或使用Interface Builder设置它。所以我假设索引0处的子视图将是背景图像,因为它将首先被绘制为低于其他所有。
您可以采取哪些措施来确保获得正在寻找的UILabel
是这样的:
- (UILabel *)getLabelForButton:(UIButton *)button
{
for (id subView in button.subviews)
{
if ([subView isKindOfClass:[UILabel class]])
{
return subView;
}
}
return nil;
}