IOS 10 больше не может устанавливать штрих-код и оттенок на MFMessageComposeViewController
Ниже код работает на iOS версии 9.x или меньше, по какой-то причине это не работает, если iOS 10
if([MFMessageComposeViewController canSendText])
{
controller.body = message;
NSString *tel = pContact.tlc;
controller.recipients = [email protected][tel]:nil;
controller.messageComposeDelegate = self;
controller.navigationBar.tintColor = [UIColor whiteColor];
controller.navigationBar.barTintColor = [UIColor blueColor];
[self presentViewController:controller animated:YES completion:nil];
}
он сломан или что-то изменилось. Не уверен, что здесь отсутствует. Я в темноте (черный цвет)
EDIT:
Я попытался использовать некоторый тестовый код в новом пустом проекте с одним представлением, и у меня возникают те же проблемы.
@IBAction func SMS(_ sender: AnyObject) {
let composeVC = MFMessageComposeViewController()
composeVC.messageComposeDelegate = self
// Configure the fields of the interface.
composeVC.recipients = ["5555555555"]
composeVC.body = "Hello from California!"
composeVC.navigationBar.tintColor = UIColor.green
composeVC.navigationBar.barTintColor = UIColor.purple
// Present the view controller modally.
self.present(composeVC, animated: true, completion: nil)
}
Изменить:
Внешний вид UINavigationBar может устанавливать цвет в тестовом приложении для фона или barTint, но я все еще не могу установить цвет текста для тестового приложения. Приложение, над которым я работаю, использует внешний вид UINavigationBar уже для установки цвета навигатора в приложении, но это не влияет на навигационную панель для SMS, поскольку она выглядит на белом фоне и белом тексте. неспособный изменить цвет текста или цвет фона, делает это представление непригодным для использования.
Ответы
Ответ 1
Вопрос
- По некоторым причинам в iOS10.x barTintColor не работает над некоторыми контейнерами совместного доступа.
- Но есть обходной путь для исправления цвета панели навигации во всех контейнерах совместного доступа.
Решение
- Используйте
UINavigationBar.appearance()
для изменения цвета панели навигации.
- Используйте свойство
backgroundColor
и setBackgroundImage(_:for:)
, чтобы исправить цвет панели навигации.
код
/// Method to set navigation bar color
func setNavigationBar() -> Void
{
// barTintColor will apply color for the app navigation bar
UINavigationBar.appearance().barTintColor = UIColor.blue
// backgroundColor will apply color for some of the sharing container app except for Messages app
UINavigationBar.appearance().backgroundColor = UIColor.blue
// backgroundImage will apply the color image for navigation bar for most of the sharing container except for `Notes`
UINavigationBar.appearance().setBackgroundImage(UIImage(color: UIColor.blue), for:UIBarMetrics.default)
}
/// UIImage extension to create an image from specified color
extension UIImage
{
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else { return nil }
self.init(cgImage: cgImage)
}
}
Надеюсь, что это поможет!
Ответ 2
До IOS 10 я использовал прокси-сервер внешнего вида для UINavigationBar
, что-то вроде этого:
NSDictionary* titleAttribs = @{ NSForegroundColorAttributeName: [ColoursAndStyles sharedInstance].fontColourNavBarTitle,
NSFontAttributeName: [ColoursAndStyles sharedInstance].fontNavbarBoldTitle };
[[UINavigationBar appearance] setBarTintColor:[ColoursAndStyles sharedInstance].viewColourNavBarMain];
[[UINavigationBar appearance] setTintColor:[ColoursAndStyles sharedInstance].viewColourNavBarTint];
[[UINavigationBar appearance] setTitleTextAttributes:titleAttribs];
Это охватывало мое использование MFMessageComposeViewController
, при setTitleTextAttributes
соблюдение цвета текста заголовка/заголовка.
С iOS 10 я использую следующую работу. Перед тем, как представить MFMessageComposeViewController
, я изменяю атрибуты текста заголовка. Например:.
- (void)sendTap:(id)s
{
// some code...
NSDictionary* newTitleAttribs = @{ NSForegroundColorAttributeName: [ColoursAndStyles sharedInstance].fontColourTitleStrip,
NSFontAttributeName: [ColoursAndStyles sharedInstance].fontNavbarBoldTitle };
[[UINavigationBar appearance] setTitleTextAttributes:newTitleAttribs];
// present the MFMessageComposeViewController...
}
И затем вернемся к тому, как я хочу их для остальной части приложения, когда заканчивается MFMessageComposeViewController
, например:
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
NSDictionary* titleAttribs = @{ NSForegroundColorAttributeName: [ColoursAndStyles sharedInstance].fontColourNavBarTitle,
NSFontAttributeName: [ColoursAndStyles sharedInstance].fontNavbarBoldTitle };
[[UINavigationBar appearance] setTitleTextAttributes:titleAttribs];
// some code...
[controller dismissViewControllerAnimated:YES completion:^{
// some code...
}];
}
Ответ 3
Это работает для меня, по крайней мере, для элементов заголовка и кнопки.
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil].tintColor = [UIColor redColor];
[UINavigationBar appearance].titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor redColor]};
Ищите дополнительную информацию здесь: https://developer.apple.com/reference/uikit/uiappearance
Надеюсь, это поможет. Приветствия