【问题标题】:How to keep UIButton floating AFTER scrollViewDidScroll(_ scrollView: UIScrollView) reached bottom?scrollViewDidScroll(_ scrollView: UIScrollView) 到达底部后如何保持 UIButton 浮动?
【发布时间】:2017-09-03 19:27:12
【问题描述】:

以下是当前的实现。灰色按钮浮动在滚动视图上。一旦到达黄色视图(滚动视图结束),有没有办法让按钮出现。然后让它漂浮在屏幕的最底部。

我正在使用以下代码:

override func scrollViewDidScroll(scrollView: UIScrollView) {

if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) {
    //reached bottom - how to show button below yellow
    // and keep it floating as shown above
}
}

添加到目前为止我尝试过的其他代码:

    @IBOutlet weak var btnScroll: UIButton!

var startingFrame : CGRect!
var endingFrame : CGRect!

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) && self.btnScroll.isHidden {
        self.btnScroll.isHidden = false
        self.btnScroll.frame = startingFrame // outside of screen somewhere in bottom
        UIView.animate(withDuration: 1.0) {
            self.btnScroll.frame = self.endingFrame // where it should be placed
        }
    }
}

func configureSizes() {
    let screenSize = UIScreen.main.bounds
    let screenWidth = screenSize.width
    let screenHeight = screenSize.height

    startingFrame = CGRect(x: 0, y: screenHeight+100, width: screenWidth, height: 100)
    endingFrame = CGRect(x: 0, y: screenHeight-100, width: screenWidth, height: 100)

}

override func viewDidLoad() {
    super.viewDidLoad()

    configureSizes()
}

【问题讨论】:

  • 您可以隐藏/取消隐藏您已经计算和评论的 if 语句中的按钮吗?还是您想实现的其他目标?
  • @Sneak 感谢您的回复!当用户查看UIScrollView 内容时,该按钮不会出现。它看起来好像躺在黄色的视野下。一旦它出现在屏幕上,它需要如上图所示持续存在。通过上述方法取消隐藏,它会不会突然出现在屏幕上而不是出现在黄色视图下方?再次感谢你。你能帮忙吗?
  • 嗯,您可以简单地使用 UIView 动画方法将其动画到屏幕上,一旦动画完成,如果您不想再次隐藏它,您可以将其保留在那里。这是一个例子:stackoverflow.com/questions/42326892/…

标签: ios swift uiscrollview


【解决方案1】:

如果我理解你的话,你想把按钮放在 gif 上显示的位置

试试这个代码:

override func scrollViewDidScroll(scrollView: UIScrollView) {
  if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) && self.button.isHidden {
    self.button.isHidden = false
    self.button.frame = startingFrame // outside of screen somewhere in bottom
    UIView.animate(withDuration: 1.0) {
      self.button.frame = yourFrame // where it should be placed
    }
  }
}

更新

添加此代码以在动画显示之前隐藏您的按钮

override func viewDidLoad() {
    super.viewDidLoad()
    self.button.isHidden = true
    ...
}

【讨论】:

  • 谢谢。你能检查一下上面的更新代码吗?该视图目前没有任何情节提要约束。仍然没有达到预期的结果。
  • 即使没有执行任何滚动,灰色按钮也会不断出现在屏幕上。我已经删除了它的所有故事板自动布局约束。我将附上它当前外观的屏幕截图。
  • 添加了滚动视图 IBoutlet 并将其委托添加到 viewdidload 中的 self。现在,在将代码添加到上述更改后,按钮动画会在屏幕加载后不久发生。即使没有滚动按钮​​动画也会发生。只有在scrollViewDidScroll()时才能控制它?谢谢!
  • 这是因为你的代码 (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) 总是正确的,重新计算它,并确保它工作正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多