Как локализовать Autolayout Constraint, добавленный программно в swift
В моем быстром коде я использую ограничения для автоматического размещения. Некоторые добавляются прямо из раскадровки, а некоторые добавляются программно в UIScrollView.
Когда приложение работает в арабской версии (в направлении RTL), ограничения авторазметки, добавленные из раскадровки, автоматически переключаются в направлении RTL без каких-либо усилий, НО те, которые добавлены программно в UIScrollView, не переворачиваются.
Это пример моих ограничений, добавляемых в UISCrollView:
var previousView: UIView = self.productsScrollView
for productObj in productsArray {
let productViewObj: ProductView = ProductView(frame: CGRectMake(0, 0, self.productsScrollView.frame.size.width, self.productsScrollView.frame.size.height), productObj: productObj)
productViewObj.translatesAutoresizingMaskIntoConstraints = false
self.productsScrollView.addSubview(productViewObj)
// Left Constraint
let leftConstraint = NSLayoutConstraint(item: productViewObj,
attribute: .Left,
relatedBy: .Equal,
toItem: previousView,
attribute: (previousView === self.productsScrollView) ? .Left : .Right,
multiplier: 1.0,
constant: 0.0);
self.productsScrollView .addConstraint(leftConstraint)
// Top Constraint
let topConstraint = NSLayoutConstraint(item: productViewObj,
attribute: .Top,
relatedBy: .Equal,
toItem: self.productsScrollView,
attribute: .Top,
multiplier: 1.0,
constant: 0.0);
self.productsScrollView .addConstraint(topConstraint)
previousView = productViewObj
... // width, height constraints
}
...// and left constraint (for the last item) is added here
self.productsScrollView.layoutIfNeeded()
Есть ли что-то, чего мне не хватает в моем коде? Или я должен проверить язык и отменить ограничения вручную?
Спасибо
1 ответ
Вы должны использовать .Leading
вместо .Left
а также .Trailing
вместо .Right
для вещей, которые должны изменить направление в зависимости от языкового направления. Вот и вся цель .Leading
а также .Trailing
,