If you use horizontal axis:
stackView.semanticContentAttribute = .forceRightToLeft
If you use vertical axis:
import UIKit
enum VerticalSemanticContentAttribute {
case forceTopToBottom, forceBottomToTop
}
final class VerticalStackView: UIStackView {
var verticalSemanticContentAttribute: VerticalSemanticContentAttribute = .forceTopToBottom {
didSet {
guard oldValue != verticalSemanticContentAttribute else { return }
reverseArrangedSubviews()
}
}
override init(frame: CGRect) {
super.init(frame: frame)
axis = .vertical
}
required init(coder: NSCoder) {
super.init(coder: coder)
axis = .vertical
}
}
// MARK: - Private functions
private extension VerticalStackView {
func reverseArrangedSubviews() {
let totalCount = arrangedSubviews.count
for (index, view) in arrangedSubviews.enumerated().reversed() where index != 0 { // we don't need to reposition the last item. It's already in the right position
removeArrangedSubview(view)
view.removeFromSuperview()
setNeedsLayout()
layoutIfNeeded()
let insertIndex = totalCount - index - 1
insertArrangedSubview(view, at: insertIndex)
setNeedsLayout()
layoutIfNeeded()
}
}
}