Ios 在UIScrollView或UITableView顶部附加UIButton

Ios 在UIScrollView或UITableView顶部附加UIButton,ios,swift,Ios,Swift,在UIScrollView或UITableView上方附加UIButton的最佳方法是什么,以便在滚动视图时,按钮保持原位 以下是一些例子: 滚动视图时,ui按钮停留在右下角 有很多方法可以做到这一点,但我最常用的两种方法如下 一种方法是将视图控制器嵌入导航控制器中。这将在顶部和底部设置一个栏,如果您选择可以在其上放置栏按钮项目 另一种方法是沿顶部放置UIView,并将约束捕捉到左侧、右侧和顶部,不留边距。然后设置高度。我通常使用40px的高度,但你可以使用适合你的需要。之后,您可以在该视图中

UIScrollView
UITableView
上方附加
UIButton
的最佳方法是什么,以便在滚动视图时,按钮保持原位

以下是一些例子:

滚动视图时,
ui按钮
停留在右下角


有很多方法可以做到这一点,但我最常用的两种方法如下

  • 一种方法是将视图控制器嵌入导航控制器中。这将在顶部和底部设置一个栏,如果您选择可以在其上放置栏按钮项目

  • 另一种方法是沿顶部放置UIView,并将约束捕捉到左侧、右侧和顶部,不留边距。然后设置高度。我通常使用40px的高度,但你可以使用适合你的需要。之后,您可以在该视图中放置一个按钮,然后对其设置约束以保持在位


  • 有很多方法可以做到这一点,但我最常用的两种方法如下

  • 一种方法是将视图控制器嵌入导航控制器中。这将在顶部和底部设置一个栏,如果您选择可以在其上放置栏按钮项目

  • 另一种方法是沿顶部放置UIView,并将约束捕捉到左侧、右侧和顶部,不留边距。然后设置高度。我通常使用40px的高度,但你可以使用适合你的需要。之后,您可以在该视图中放置一个按钮,然后对其设置约束以保持在位


  • 根据我的经验,这与scrollView本身是不可靠的

    我的解决方案通常是将需要浮动在tableView/scrollView上方的任何内容放在一个普通的ViewController中,该控制器也包含tableView/scrollView父级


    如果将情节提要与UITableViewController场景一起使用,这可能意味着您需要将另一个场景与UIViewController一起使用,并使用一个包含UITableViewController的容器。

    根据我的经验,这在scrollView本身中是不可能实现的

    我的解决方案通常是将需要浮动在tableView/scrollView上方的任何内容放在一个普通的ViewController中,该控制器也包含tableView/scrollView父级


    如果将情节提要与UITableViewController场景一起使用,这可能意味着您需要将另一个场景与UIViewController一起使用,并使用包含UITableViewController的容器。

    对于UITableView,请使用tableHeaderView。对于UIScrollView,您需要创建不在滚动视图层次结构中的单独视图。

    对于UITableView,请使用tableHeaderView。对于UIScrollView,您需要创建一个不在滚动视图层次结构中的单独视图。

    另一个解决方案是将您的
    ui按钮
    放在
    ui工具栏
    中,然后使工具栏成为
    UINavigationController
    视图的子视图。之后,在
    viewDidLayoutSubviews
    中,您可以将工具栏的
    rect
    设置为位于导航栏的正下方,并偏移
    UIScrollView
    UITableView
    的顶部。另一种解决方案是将
    UIButton
    放在
    UIToolbar
    中,然后使工具栏成为
    UINavigationController
    视图的子级。之后,在
    viewDidLayoutSubviews
    中,您可以将工具栏的
    rect
    设置为位于导航栏的正下方,并偏移
    UIScrollView
    UITableView
    的顶部。我认为这应该可以实现。将按钮放置在tableviewcontroller外部的视图中。然后将一个出口拖动到tableviewcontroller文件。然后将其添加到代码中。这段代码将把它放在屏幕的顶部

        @IBOutlet var buttonView: UIView!
    
    override func viewDidLayoutSubviews() {
        self.view.addSubview(buttonView)
    }
    
    override func scrollViewDidScroll(scrollView: UIScrollView) {
        var rect = self.buttonView.frame
        rect.origin.y = max(0,scrollView.contentOffset.y + scrollView.contentInset.top)
        self.buttonView.frame = rect
    }
    

    我认为这应该行得通。将按钮放置在tableviewcontroller外部的视图中。然后将一个出口拖动到tableviewcontroller文件。然后将其添加到代码中。这段代码将把它放在屏幕的顶部

        @IBOutlet var buttonView: UIView!
    
    override func viewDidLayoutSubviews() {
        self.view.addSubview(buttonView)
    }
    
    override func scrollViewDidScroll(scrollView: UIScrollView) {
        var rect = self.buttonView.frame
        rect.origin.y = max(0,scrollView.contentOffset.y + scrollView.contentInset.top)
        self.buttonView.frame = rect
    }
    

    谢谢你们的回答! 通过将按钮从scrollView移动到View本身,我在故事板中实现了这一点。这样它就附加在UIView上,并且独立于scrollview

    所以现在的结构是:

    - View
      - ScrollView
      - Button
    
    在此之前:

    - View
      - ScrollView
        - Button
    

    谢谢你们的回答! 通过将按钮从scrollView移动到View本身,我在故事板中实现了这一点。这样它就附加在UIView上,并且独立于scrollview

    所以现在的结构是:

    - View
      - ScrollView
      - Button
    
    在此之前:

    - View
      - ScrollView
        - Button
    

    我的第一反应是将按钮放在您想要的uiscrollview或uitableview之外,然后滚动将不会对其产生影响。这样你就可以把它放在其中任何一个上面,但是因为它不在它们里面,所以它不会和它们一起滚动。这使得解决这个问题更加清晰。谢谢很高兴这有帮助。祝你好运。我的第一反应是将按钮放在你想要的uiscrollview或uitableview之外,然后滚动将不会对其产生影响。这样你就可以把它放在其中任何一个上面,但是因为它不在它们里面,所以它不会和它们一起滚动。这使得解决这个问题更加清晰。谢谢很高兴这有帮助。祝你好运