IOS 11 UIBarButtonItem изображения не калибруются
Ответ на мой вопрос был намечен на этот вопрос, поэтому я считаю, что ответ заключается в отключении автозапуска для моего представления UIToolbar.
Код, который, как говорят, работает для представлений, это
cButton.translatesAutoresizingMaskIntoConstraints = YES;
Но я не уверен, применим ли он к моему коду, поскольку UIToolbar не наследует UIView.
У меня есть множество небольших изображений, которые я использую в своих играх разных размеров в зависимости от устройства и ориентации. Вместо того, чтобы иметь много разных изображений и добавлять новые, когда Apple вводит новые устройства, я решил сделать один образ изображения 160x160 каждый, а затем изменить его размер, когда он используется. Это отлично работает с iOS 4 - iOS 10, но не работает в iOS 11.
Код довольно прост:
// Get the image
NSString *pictFile = [[NSBundle mainBundle] pathForResource:@"Correct" ofType:@"png"];
UIImage *imageToDisplay = [UIImage imageWithContentsOfFile:pictFile];
UIImage *cImage = [UIImage imageWithCGImage:imageToDisplay.CGImage scale:[UIScreen mainScreen].scale orientation:imageToDisplay.imageOrientation];
UIButton *cButton = [UIButton buttonWithType:UIButtonTypeCustom];
[cButton setImage:cImage forState:UIControlStateNormal];
[cButton setTitle:@"c" forState:UIControlStateNormal];
//set the frame of the button to the size of the image
cButton.frame = CGRectMake(0, 0, standardButtonSize.width, standardButtonSize.height);
//create a UIBarButtonItem with the button as a custom view
c = [[UIBarButtonItem alloc] initWithCustomView:cButton];
Это то, что похоже на pre11. Элементы кнопки панели были изменены и хорошо вписаны в нижнюю панель. Примечание. Я уменьшил размер флажка на 50%, чтобы убедиться, что я смотрю на правильный код и что он ведет себя так, как я ожидаю.
![правильная версия]()
Вот как они выглядят в симуляторе для Xcode 9.0 GM и iOS 11. Обратите внимание, что верхняя строка кнопок изменяется правильно, а нижняя строка расширяется, чтобы заполнить пространство, выделенное для панели вкладок. Такое же поведение наблюдается и на iPad, и на разных устройствах.
![iOS 11]()
Любые идеи о том, как отключить автоопределение или добавить ограничения?
Ответы
Ответ 1
BarButtonItem (iOS11\xCode9) использует автозапуск вместо фреймов. Попробуйте это (Swift):
if #available(iOS 9.0, *) {
cButton.widthAnchor.constraint(equalToConstant: customViewButton.width).isActive = true
cButton.heightAnchor.constraint(equalToConstant: customViewButton.height).isActive = true
}
Цель C
if (@available(iOS 9, *)) {
[cButton.widthAnchor constraintEqualToConstant: standardButtonSize.width].active = YES;
[cButton.heightAnchor constraintEqualToConstant: standardButtonSize.height].active = YES;
}
Ответ 2
Ответ Fallstreak (+1) был решением в моем случае. У меня был пользовательский вид, который не работает с краном. Просто хотел поделиться тем, что мне нужно было сделать для пользовательского представления в навигационном элементе для работы. Это все быстро 3
let backButtonView = BackButtonView.loadNib()
backButtonView?.addTarget(self, action: #selector(returnToPrevious), for: .touchUpInside)
backButtonView.widthAnchor.constraint(equalToConstant: backButtonView.frame.width).isActive = true
backButtonView.heightAnchor.constraint(equalToConstant: backButtonView.frame.height).isActive = true
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButtonView!)
2 строки о ширине/высоте якоря пришли из ответа Fallstreak и были решением в этом случае.