Ответ 1
Используя iOS7/8 с автоматической компоновкой, button.imageView
не масштабируется, когда button
выложено, например. для iPhone 6:
(lldb) po button
<UIButton: 0x7fb4f501d7d0; frame = (0 0; 375 275); opaque = NO; autoresize = RM+BM; tag = 102; layer = <CALayer: 0x7fb4f501d160>>
(lldb) po button.imageView
<UIImageView: 0x7fb4f51d21f0; frame = (0 0; 0 0); clipsToBounds = YES; hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7fb4f5152860>>
После установки button
изображения button.imageView
принял размер изображения, например. для изображения 320x240:
(lldb) po button.imageView
<UIImageView: 0x7fb4f51d21f0; frame = (27.5 17.5; 320 240); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7fb4f5152860>>
Похоже, что button.imageView
не соблюдает режим содержимого, но на самом деле это проблема с button.imageView
.
Ответ заключается в том, чтобы установить button
выравнивание содержимого.
Следующие наборы button
image, устанавливает button.imageView
режим содержимого и приравнивает button.imageView
размер button
:
[button setImage:image forState:UIControlStateNormal];
button.imageView.contentMode = UIViewContentModeScaleAspectFill;
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
Теперь button.imageView
имеет тот же размер, что и button
, и имеет желаемый режим содержимого.
(lldb) po button.imageView
<UIImageView: 0x7faac219a5c0; frame = (0 0; 375 275); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7faac219a6c0>>
Таким образом достигается желаемый результат. Очень удобно!