我遇到了UIButton图像属性的问题。我的资产目录包含Any / Any尺寸类的默认图像以及特定于Regular / Regular类的图像。当我在Interface Builder中将UIButton的图像属性设置为“img_facebook”时,iPad上的图像呈现不正确(选择任意/任意大小的图像而不是常规/常规图像)。但是当我在“traitCollectionDidChange:”方法中刷新它时,图像会正确呈现(请参阅附带的代码片段)。
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{
[super traitCollectionDidChange:previousTraitCollection];
[_facebookButton setImage:[UIImage imageNamed:@"img_facebook"] forState:UIControlStateNormal];
}
看起来IB创建了一个UIImage实例并仅将其分配给属性一次。这是有道理的,但如果我用UIImage而不是UIButton做同样的事情,一切都很好。
有没有人遇到类似的问题?可以在IB中修复它还是我必须在代码中手动重置图像?
答案 0 :(得分:1)
我刚遇到类似的问题。它似乎是UIButton的一个错误。我检查了我的按钮的traitCollection属性(通过Interface Builder添加到常规视图控制器视图):
<UITraitCollection: 0x7ff6f27a8930; _UITraitNameUserInterfaceIdiom = Phone, _UITraitNameDisplayScale = 2.000000>
它缺少预期的大小等级。例如,父视图traitCollection如下所示:
<UITraitCollection: 0x7ff6f48a1640; _UITraitNameUserInterfaceIdiom = Phone, _UITraitNameDisplayScale = 2.000000, _UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Regular, _UITraitNameTouchLevel = 0, _UITraitNameInteractionModel = 1>
最简单的解决方法是修改UIImageAsset以使用特定于设备选项而不是大小类:
添加iPhone和iPad特定图片。这为我解决了(Xcode Beta 6.3)
答案 1 :(得分:1)
我有同样的问题,我找到的唯一方法是使用另一个api为按钮设置正确的图像。
UIImage *image;
if ( NSClassFromString(@"UITraitCollection") ) { //need to support iOS7
image = [UIImage imageNamed:@"xxx" inBundle:nil compatibleWithTraitCollection:self.traitCollection];
} else {
image = [UIImage imageNamed:@"xxx"];
}
[button setImage:image forState:UIControlStateNormal];
从我的测试来看,当按钮上调用traitCollectionDidChange时,按钮的图像似乎只会自动更改为相应的特征。这意味着如果你想手动控制按钮的图像,你必须在设置图像到按钮时获得正确的特征图像,否则你将需要等待下一个traitCollectionDidChange碰巧按钮以自动更改图像。