scrollViewDidScroll(_ scrollView: UIScrollView) 到达底部后如何保持 UIButton 浮动?

Posted

技术标签:

【中文标题】scrollViewDidScroll(_ scrollView: UIScrollView) 到达底部后如何保持 UIButton 浮动?【英文标题】:How to keep UIButton floating AFTER scrollViewDidScroll(_ scrollView: UIScrollView) reached bottom? 【发布时间】: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 动画方法将其动画到屏幕上,一旦动画完成,如果您不想再次隐藏它,您可以将其保留在那里。这是一个例子:***.com/questions/42326892/… 【参考方案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)) 总是正确的,重新计算它,并确保它工作正常

以上是关于scrollViewDidScroll(_ scrollView: UIScrollView) 到达底部后如何保持 UIButton 浮动?的主要内容,如果未能解决你的问题,请参考以下文章

“覆盖func scrollViewDidScroll”多次调用。我只想打电话一次

折叠标题视图 - ScrollView 在到达底部时停止滚动

scrollViewDidScroll:以编程方式滚动时?

在 UIWebView 中没有调用 scrollViewDidScroll

禁用 scrollViewDidScroll:滚动 UICollectionView 时 - iOS

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 在 iOS 8 中太慢了