我有一个名为parentView的UIView
实例,parentView有两个子视图:
1-名为label1的标签
2- anther UIView
名为childView,其标签名为label2。
致电:
self.parentView.semanticContentAttribute = .forceRightToLeft
只有label1从左向右翻转,为什么childView没有翻转,不应该让parentView被所有孩子翻过来?
注意:所有视图都受到前导和尾随约束的约束。
我知道有一种可能的解决方案,即迭代所有子视图并设置它semanticContentAttribute
,还有其他解决方案吗?
答案 0 :(得分:0)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
属性不会传播到子视图。它旨在成为一个独立的用例,您必须在每个视图上更改属性。
如果您不得不对孩子进行迭代,可能会有更好的解决方案来解决您所面临的问题。你究竟想做什么?
答案 1 :(得分:0)
您可以使用它来翻转所有视图。希望这会有所帮助。基本上你需要应用阿拉伯语和英语的检查并翻转它
if UserDefaults.standard.value(forKey: "language") as? String == "ar" {
UIView.appearance().semanticContentAttribute = .forceRightToLeft
} else UserDefaults.standard.value(forKey: "language") as? String == "en" {
UIView.appearance().semanticContentAttribute = .forceLeftToRight
}
答案 2 :(得分:0)
您可以尝试以下方法:
func deactivateRTL(of view: UIView) {
// 1. code here do something with view
for subview in view.subviews {
subview.semanticContentAttribute = .forceLeftToRight
deactivateRTL(of: subview)
}
}
答案 3 :(得分:0)
根据 Shairjeel 的回答,您可以使用以下功能
func switchDirection(view: UIView, newDirection: String) {
if (newDirection == "ltr") {
view.semanticContentAttribute = .forceLeftToRight
} else {
view.semanticContentAttribute = .forceRightToLeft
}
for subview in view.subviews {
switchDirection(view: subview, newDirection: newDirection)
}
}
你可以在 cellForRowAt 中这样调用它:
switchDirection(view: tableCell, newDirection: "ltr")
或整个 UIView
switchDirection(view: view, newDirection: "rtl")
答案 4 :(得分:-1)
尝试
yourView.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
这将像镜像一样反转视图,因此您需要对subView进行相同操作
像这样:
subView.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)