私のアプリケーションは、英語とアラビア語の両方にローカライズされています。
残念ながら、ローカライズの自動レイアウト動作が必要ない場合があります。つまり、先頭と末尾のスペースを逆にするということです。この動作をオーバーライドしたい。それを行う方法はありますか?
私のアプリケーションは、英語とアラビア語の両方にローカライズされています。
残念ながら、ローカライズの自動レイアウト動作が必要ない場合があります。つまり、先頭と末尾のスペースを逆にするということです。この動作をオーバーライドしたい。それを行う方法はありますか?
先頭を常に左 (および末尾を常に右) にする、つまり言語に依存しないようにするには、すべての制約の [言語の方向を尊重する] のチェックマークを外します。
このチェックマークは、「最初のアイテム」ボタンの下の属性インスペクターの制約設定にあります。
@Pavelの回答のように、「言語の方向を尊重する」プロパティをオフにする必要があります。制約が多い場合は、xib またはストーリーボード ファイルを XML ビューで開き、すべての「先頭」の値を「左」に、すべての「末尾」の値を「右」に置き換えれば完了です。
これを試して
@implementation RTLController #pragma mark - Public - (void)disableRTLForView:(UIView *)view { [self updateSubviewForParentViewIfPossible:view]; } #pragma mark - Private - (void)updateConstraintForView:(UIView *)view { NSMutableArray *constraintsToRemove = [[NSMutableArray alloc] init]; NSMutableArray *constraintsToAdd = [[NSMutableArray alloc] init]; for (NSLayoutConstraint *constraint in view.constraints) { NSLayoutAttribute firstAttribute = constraint.firstAttribute; NSLayoutAttribute secondAttribute = constraint.secondAttribute; if (constraint.firstAttribute == NSLayoutAttributeLeading) { firstAttribute = NSLayoutAttributeLeft; } else if (constraint.firstAttribute == NSLayoutAttributeTrailing) { firstAttribute = NSLayoutAttributeRight; } if (constraint.secondAttribute == NSLayoutAttributeLeading) { secondAttribute = NSLayoutAttributeLeft; } else if (constraint.secondAttribute == NSLayoutAttributeTrailing) { secondAttribute = NSLayoutAttributeRight; } NSLayoutConstraint *updatedConstraint = [self constraintWithFirstAttribute:firstAttribute secondAtribute:secondAttribute fromConstraint:constraint]; [constraintsToRemove addObject:constraint]; [constraintsToAdd addObject:updatedConstraint]; } for (NSLayoutConstraint *constraint in constraintsToRemove) { [view removeConstraint:constraint]; } for (NSLayoutConstraint *constraint in constraintsToAdd) { [view addConstraint:constraint]; } } - (void)updateSubviewForParentViewIfPossible:(UIView *)mainView { NSArray *subViews = mainView.subviews; [self updateConstraintForView:mainView]; if (subViews.count) { for (UIView * subView in subViews) { [self updateConstraintForView:subView]; [self updateSubviewForParentViewIfPossible:subView]; } } } - (NSLayoutConstraint *)constraintWithFirstAttribute:(NSLayoutAttribute)firstAttribute secondAtribute:(NSLayoutAttribute)secondAttribute fromConstraint:(NSLayoutConstraint *)originalConstraint { NSLayoutConstraint *updatedConstraint = [NSLayoutConstraint constraintWithItem:originalConstraint.firstItem attribute:firstAttribute relatedBy:originalConstraint.relation toItem:originalConstraint.secondItem attribute:secondAttribute multiplier:originalConstraint.multiplier constant:originalConstraint.constant]; return updatedConstraint; } @end
RTLController *rtl = [[RTLController alloc] init]; [rtl disableRTLForView:self.view];