Неправильно отображенное свойство изображения UIButton с использованием каталога ресурсов и классов размеров
У меня проблема с свойством изображения UIButton. Мой каталог активов содержит изображения по умолчанию для класса Любой / Любой размер и изображения, относящиеся к обычному / обычному классу. Когда я устанавливаю свойство изображения 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 или нужно вручную сбросить изображение в коде?
2 ответа
У меня та же проблема, единственный способ, который я нашел, это использовать другой 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, случившегося с кнопкой, чтобы автоматически изменить изображение.
Я только что столкнулся с подобной проблемой. Кажется, это ошибка с 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, чтобы использовать опцию Device Specific вместо классов размера:
И добавьте изображения для iPhone и iPad. Это решило это для меня (Xcode Beta 6.3)