изменение положения кнопки в scrollview

У меня есть ScrollView и в этом виде прокрутки у меня есть кнопки и одна таблица. Я хочу изменить кнопки положения и таблицу размеров при загрузке формы.
Например, если таблица состоит из 5 ячеек, положение кнопок нужно изменить на 200 по y (вниз). А таблица надо имеет высоту = height_table + 200.

Мой код:

var yPosition: CGFloat = 0;
var scrollViewContentSize: CGFloat = 505;
var names = ["first","second","third","fourth","fifth"]

 override func viewDidAppear(animated: Bool) {

    self.yPosition += 40 * CGFloat(names.count)
    self.scrollViewContentSize += 40 * CGFloat(names.count)
    self.scrlMain.contentSize = CGSize(width: 320,height: self.scrollViewContentSize)

    let btnY1: CGFloat = 40 * CGFloat(names.count) + 467
    btn1.frame.origin = CGPoint(x: 210, y: btnY1)

    let btnY2: CGFloat = 44 * CGFloat(names.count) + 386
    btn2.frame = CGRectMake(26, btnY2, 46, 30)

    let btnY3: CGFloat = 44 * CGFloat(names.count) + 427
    btn3.frame = CGRectMake(26, btnY3, 46, 30)

    var framelb: CGRect = lb.frame
    framelb.origin.y += 40 * CGFloat(names.count)
    framelb.origin.x = 110
    lb.frame = framelb

    tableView.contentOffset.y += 40 * CGFloat(names.count)
    tableView.contentSize = CGSize(width: 304, height: tableView.contentOffset.y)
}

Что я сделал не так?

screen1

screen2

Я попытался добавить функцию setControlsPosition, но ничего не получилось.

Код:

func setControlsPosition(){
tableView.contentOffset.y += 40 * CGFloat(names.count)
tableView.contentSize = CGSize(width: 304, height: tableView.contentOffset.y)

let lblY: CGFloat = tableView.frame.origin.y + tableView.frame.size.height+10 //10 for spacing between tableView and label
lb.frame = CGRectMake(26, lblY, 46, 30)

let btn1Y: CGFloat = lb.frame.origin.y + lb.frame.size.height + 10 // Spacing between label and button
btn1Y.frame = CGRectMake(26, btn1Y, 46, 30)
}

//This is code work well
   override func viewDidAppear(animated: Bool) {

    self.yPosition += 40 * CGFloat(names.count)
    self.scrollViewContentSize += 40 * CGFloat(names.count)
    self.scrlMain.contentSize = CGSize(width: 320,height: self.scrollViewContentSize)
//This function is performed, but nothing changes
    setControlsPosition()
}

Я проверил, имена.count = 5 в функции setControlsPosition. Это правильно.

1 ответ

  1. Можно использовать предыдущий элемент управления в качестве ссылки для определения позиции другой элемент управления

    override func viewDidAppear(animated: Bool) {
    
        setControlsPosition()
    
        self.scrollViewContentSize = button3.frame.origin.y + button3.frame.size.height + 10
        self.scrlMain.contentSize = CGSize(width: 320,height: self.scrollViewContentSize)
    }
    
    func setControlsPosition(){
        tableView.contentOffset.y += 40 * CGFloat(names.count)
        tableView.contentSize = CGSize(width: 304, height: tableView.contentOffset.y)
    
        let lblY: CGFloat = tableView.frame.origin.y + tableView.frame.size.height+10 //10 for spacing between tableView and label
        lb.frame = CGRectMake(26, lblY, 46, 30)
    
        let btn1Y: CGFloat = lb.frame.origin.y + lb.frame.size.height + 10 // Spacing between label and button
        btn1Y.frame = CGRectMake(26, btn1Y, 46, 30)
    }
    

    Пожалуйста, поймите и затем реализовать.

    Аналогично вы можете сделать для всех других элементов управления you’R. После установки всех других элементов управления можно определить размер содержимого прокрутки в соответствии с положением последнего элемента управления.

    Все это может быть проще с Autolayout. Попробуйте это использовать.

    Надеюсь, это может помочь вам