【问题标题】:change button position in scrollview更改滚动视图中的按钮位置
【发布时间】:2016-05-03 08:27:50
【问题描述】:

我有 ScrollView,在这个滚动视图中我有按钮和一个表格。我想在加载表单时更改位置按钮和尺寸表。 例如,如果表格由 5 个单元格组成,则按钮位置需要在 200 上更改 y(向下)。并且表格需要有 height = 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

我尝试添加 func 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()
}

我检查了,函数 setControlsPosition 中的 names.count = 5。没错。

【问题讨论】:

  • 你有一个滚动视图,在这个滚动视图中有一个tableView?
  • 你能解释一下吗?你有一个滚动视图,有一个表格(滚动视图)和一个按钮?第一个滚动视图是水平的?
  • 我有滚动视图,在这个滚动视图中有表格视图和按钮。
  • @Dim 请分享任何屏​​幕截图,因为您的问题与您实施的内容混淆。为什么你用按钮(btnY1)取常量。是否要在 tableview 的末尾显示所有按钮?
  • 我添加了屏幕。是的,我想在 tableview 的末尾显示所有按钮。

标签: ios swift uitableview uiscrollview position


【解决方案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)
}

请理解后再执行。

同样,您可以为所有其他控件执行此操作。设置所有其他控件后,您可以根据最后一个控件的位置定义滚动内容大小。

使用自动布局可以让这一切变得更简单。尝试使用它。

希望对你有帮助

【讨论】:

  • 我将 setControlsPosition() 添加到 viewDidAppear,但什么也没发生。
  • 调试代码并检查它是否按照您的要求工作。我刚刚给出了一个例子,否则我需要看看你的完整代码
  • 我在问题中添加了新代码。抱歉,我必须在 Stack Overflow 上拥有 20 声望才能在那里交谈。
猜你喜欢
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 2016-04-26
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
相关资源
最近更新 更多