UIButton initWithFrame: CGRectMake не работает в Xcode 9.3

обновите xcode до 9.3 и у меня проблемы с программируемой кнопкой

в Xcode 8 у меня это работает следующим образом

UIButton *btnSettingsButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
[btnSettingsButton setBackgroundImage:[UIImage imageNamed:@"settings.png"] forState:UIControlStateNormal];
[btnSettingsButton addTarget:self action:@selector(setttingsDashboard:) forControlEvents:UIControlEventTouchUpInside];
[btnSettingsButton setShowsTouchWhenHighlighted:YES];
UIBarButtonItem *btnSettingsItem =[[UIBarButtonItem alloc] initWithCustomView:btnSettingsButton];

экран Xcode 8 введите здесь описание изображения

изображение "settings.png" кнопки мне хорошо видно с высотой 25 и шириной 25.

но когда я активирую xcode 9, он не принимает initWithFrame: CGRectMake, и он выходит намного больше. "размер изображения кнопки

экран Xcode 9.3 введите здесь описание изображения

Как это исправить?


person Jose Luis Tovar Jimenez    schedule 23.05.2018    source источник
comment
что такое размер settings.png   -  person Abdelahad Darwish    schedule 23.05.2018
comment
settings.png имеет размер 50 X 50   -  person Jose Luis Tovar Jimenez    schedule 23.05.2018
comment
попробуйте сделать 25x25, потому что кнопка растягивается до своего размера   -  person Abdelahad Darwish    schedule 23.05.2018
comment
и нет возможности, чтобы кнопка оставалась с размером, который я ей даю? а изображение остается с таким размером кнопки?   -  person Jose Luis Tovar Jimenez    schedule 23.05.2018


Ответы (4)


Когда вы вызываете initWithCustomView, вы создаете пользовательский элемент кнопки панели.

  • В iOS 10 и более ранних версиях он имел фиксированный размер (как вы правильно заметили, на основе фрейма).

  • Но в iOS 11 это поведение полностью изменилось: iOS 11 использует автоматический макет, чтобы получить размер пользовательского элемента кнопки панели.

Поэтому вам необходимо указать внутренние ограничения автоматического макета (например, ограничения по высоте и ширине), которые определяют размер пользовательского представления. Если вы зададите своей кнопке ограничение по высоте 25 и ограничение по ширине 25, все будет хорошо.

person matt    schedule 24.05.2018

Вы можете изменить размер изображения на 25x25

или

просто установите режим содержимого для изображения

[[btnSettingsButton imageView] setContentMode: UIViewContentModeScaleAspectFit];
[btnSettingsButton setImage:[UIImage imageNamed:@"settings.png"] forState:UIControlStateNormal];
person Abdelahad Darwish    schedule 23.05.2018

Есть ли проблема с добавлением элемента кнопки панели, например: -

UIBarButtonItem *settingsButton=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"settings.png"] style:UIBarButtonItemStyleDone target:self action:@selector(setttingsDashboard:)];
person tryKuldeepTanwar    schedule 24.05.2018

решить ее, поместив

[btnSettingsButton setImage:[UIImage imageNamed:@"settings.png"] forState:UIControlStateNormal];
btnSettingsButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
btnSettingsButton.contentEdgeInsets = UIEdgeInsetsMake(10, 0, 10, -20); 
person Jose Luis Tovar Jimenez    schedule 24.05.2018