UIDatePicker 在 iOS9 RTL 上翻转
UIDatePicker Flips on iOS9 RTL
在 RTL 上显示 DatePicker - 时间模式时我遇到了一个奇怪的问题。
我正在以编程方式显示日期选择器。
分钟应该在右边,小时在左边,在下图中你可以看到它被翻转了:
它发生在 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];
有什么建议吗?
我认为这是您设置 .ForceRightToLeft
对 UIView
的 appearance
代理的副作用。
如果是这种情况,请注意这不是受支持的用例。您的应用只有在满足以下条件时才应处于 RTL 模式:
a) 本地化为 RTL 语言,并且
b) 设备的系统语言设置为该语言。
在这种情况下,它是导致问题的子视图之一。
在所有选择器子视图上强制从左到右将为您解决这个问题。
我通过在每个日期选择器子视图上强制 forceRightToLeft
解决了这个问题。
尝试以下操作,它应该有效:
override func viewDidLayoutSubviews() {
for currentView in datePicker.subviews {
currentView.semanticContentAttribute = .forceRightToLeft
}
}
您可以强制所有 UIDatePicker 类 来自 AppDelegate 的 RTL。
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
[[UIView appearanceWhenContainedIn:[UIDatePicker class], nil] setSemanticContentAttribute:UISemanticContentAttributeForceRightToLeft];
}
在AppDelegate.swift
中输入以下代码:
UIPickerView.appearance().semanticContentAttribute = .forceLeftToRight
在 RTL 上显示 DatePicker - 时间模式时我遇到了一个奇怪的问题。
我正在以编程方式显示日期选择器。 分钟应该在右边,小时在左边,在下图中你可以看到它被翻转了:
它发生在 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];
有什么建议吗?
我认为这是您设置 .ForceRightToLeft
对 UIView
的 appearance
代理的副作用。
如果是这种情况,请注意这不是受支持的用例。您的应用只有在满足以下条件时才应处于 RTL 模式:
a) 本地化为 RTL 语言,并且
b) 设备的系统语言设置为该语言。
在这种情况下,它是导致问题的子视图之一。 在所有选择器子视图上强制从左到右将为您解决这个问题。
我通过在每个日期选择器子视图上强制 forceRightToLeft
解决了这个问题。
尝试以下操作,它应该有效:
override func viewDidLayoutSubviews() {
for currentView in datePicker.subviews {
currentView.semanticContentAttribute = .forceRightToLeft
}
}
您可以强制所有 UIDatePicker 类 来自 AppDelegate 的 RTL。
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
[[UIView appearanceWhenContainedIn:[UIDatePicker class], nil] setSemanticContentAttribute:UISemanticContentAttributeForceRightToLeft];
}
在AppDelegate.swift
中输入以下代码:
UIPickerView.appearance().semanticContentAttribute = .forceLeftToRight