У меня странная проблема при отображении режима DatePicker - Time на RTL.

Я программно отображаю выбор даты. Минуты должны быть справа, а часы - слева, а на следующем изображении вы можете увидеть, что это перевернуто:

enter image description here

Это происходит на iOS 9 и выше.

Код, который я использую:

UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height+44, self.view.frame.size.width, 216)];
datePicker.tag = tag;
[datePicker setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
[datePicker setDatePickerMode:UIDatePickerModeTime];
[datePicker setBackgroundColor:[UIColor whiteColor]];
[datePicker addTarget:self action:@selector(changeDate:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:datePicker];

Какие-либо предложения ?

2
user3660992 23 Фев 2016 в 15:13

5 ответов

Лучший ответ

Я думаю, что это побочный эффект вашей настройки .ForceRightToLeft на прокси-сервере UIView appearance.

В этом случае обратите внимание, что этот вариант использования не поддерживается. Ваше приложение должно быть в RTL, только если оно:

А) локализован на язык RTL, и

Б) системный язык устройства установлен на этот язык.

3
wakachamo 23 Фев 2016 в 18:08

Это одно из подпредставлений, которое в данном случае вызвало проблему. принудительное переключение слева направо на все подвиды выбора исправит это за вас.

0
Nevgauker 21 Фев 2017 в 16:04

Я решил это, заставив forceRightToLeft на каждом подвиде выбора даты.

Попробуйте следующее, и это должно сработать:

override func viewDidLayoutSubviews() {
    for currentView in datePicker.subviews {
        currentView.semanticContentAttribute = .forceRightToLeft
    }
} 
5
Hexfire 18 Дек 2017 в 12:14

В AppDelegate.swift введите следующий код:

UIPickerView.appearance().semanticContentAttribute = .forceLeftToRight
2
Merichle 9 Июн 2018 в 07:04

Вы можете заставить все классы UIDatePicker быть RTL из AppDelegate.

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
    [[UIView appearanceWhenContainedIn:[UIDatePicker class], nil] setSemanticContentAttribute:UISemanticContentAttributeForceRightToLeft];
}
0
Elad 15 Фев 2018 в 14:47