Я добавляю несколько кнопок программно в вертикальном ScrollView в Swift. Для каждой кнопки я рассчитываю комнату в одном ряду. Если места достаточно, кнопка добавляется после предыдущей кнопки, в противном случае она будет добавлена в новый ряд. Я пытаюсь установить расположение каждой кнопки, используя
topButtons[j].frame.origin.x = currentOriginX
topButtons[j].frame.origin.y = currentOriginY
, где currentOriginX и currentOriginY меняются в каждой итерации. Однако кнопки по-прежнему отображаются в верхнем левом углу представления прокрутки и, таким образом, перекрывают друг друга. Как мне решить эту проблему? (Также я хотел оставить ширину кнопки такой же, как и ее текст, поэтому я не установил ширину кнопки.)
Мой код прикреплен ниже.
@IBOutlet weak var topScrollView: UIScrollView!
var topButtons = [UIButtons()]
func displayTopItems() {
let scrollViewWidth = topScrollView.frame.size.width
let buttonHeight = CGFloat(40)
var currentOriginX = topScrollView.frame.origin.x
var currentOriginY = topScrollView.frame.origin.y
self.topScrollView.automaticallyAdjustsScrollIndicatorInsets = false
self.topScrollView.isScrollEnabled = true
self.topScrollView.isUserInteractionEnabled = true
self.topScrollView.translatesAutoresizingMaskIntoConstraints = false
for j in 0..<self.itemsClass.toBuyItems.count {
topButtons.append(UIButton(type: UIButton.ButtonType.system))
topButtons[j].setTitle(self.itemsClass.toBuyItems[j], for: UIControl.State.normal)
let buttonWidth = topButtons[j].frame.size.width
if j > 0 {
let lastButtonLeft = topButtons[j-1].frame.origin.x
let lastButtonWidth = topButtons[j-1].frame.size.width
let sameRow = lastButtonLeft + lastButtonWidth + buttonWidth + 50 < scrollViewWidth
if sameRow {
currentOriginX += lastButtonWidth + 30
}
else {
currentOriginX = 0
currentOriginY += buttonSize.height + 20
}
}
// self.topScrollView.contentOffset.x = currentOriginX
// self.topScrollView.contentOffset.y = currentOriginY
topButtons[j].frame.origin.x = currentOriginX
topButtons[j].frame.origin.y = currentOriginY
topButtons[j].setTitleColor(UIColor.white, for: UIControl.State.normal)
topButtons[j].backgroundColor = UIColor.black
topButtons[j].translatesAutoresizingMaskIntoConstraints = false
topButtons[j].heightAnchor.constraint(equalToConstant: buttonSize.height).isActive = true
topButtons[j].layer.borderColor = UIColor.red.cgColor
topButtons[j].layer.cornerRadius = 10.0
topButtons[j].addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
topButtons[j].tag = j
self.topScrollView.addSubview(topButtons[j])
}
}