如何在UIScrollView上进行UIButton修复?

时间:2017-06-13 15:29:33

标签: ios uiscrollview

我在UIScrollView上有一个UIButton,当我缩放我的滚动视图时,按钮位置没有修复...有没有办法让它在一个位置修复?

4 个答案:

答案 0 :(得分:1)

对于iOS 11,UIScrollView有一个名为frameLayoutGuide的实例属性。 frameLayoutGuide有以下声明:

var frameLayoutGuide: UILayoutGuide { get }
  

布局指南基于滚动视图的未转换框架矩形。

  

如果要创建显式涉及滚动视图本身的框架矩形的自动布局约束,请使用此布局指南,而不是其内容矩形。

以下Swift 4 UIViewController实施说明如何使用frameLayoutGuideUIButton置于UIScrollView内。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var scrollView: UIScrollView!
    let button = UIButton(type: .system)
    let imageView = UIImageView(image: UIImage(named: "LargeImage"))

    override func viewDidLoad() {
        super.viewDidLoad()

        // Add imageView as a scrollable subview of scrollView and set its constraints
        scrollView.addSubview(imageView)
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.leadingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.leadingAnchor).isActive = true
        imageView.trailingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.trailingAnchor).isActive = true
        imageView.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor).isActive = true
        imageView.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor).isActive = true

        // Add button as a subview of scrollView and set its constraints (centered)
        button.setTitle("Button", for: .normal)
        scrollView.addSubview(button)
        button.translatesAutoresizingMaskIntoConstraints = false
        button.centerXAnchor.constraint(equalTo: scrollView.frameLayoutGuide.centerXAnchor).isActive = true
        button.centerYAnchor.constraint(equalTo: scrollView.frameLayoutGuide.centerYAnchor).isActive = true
    }

}

答案 1 :(得分:1)

将按钮放置/设置在滚动视图上(不在滚动视图内),如此快照中所示。并且还针对滚动视图的超级视图设置按钮约束(位置)。

enter image description here

这是参考。每个视图相对于彼此的位置层次结构的快照。

enter image description here

答案 2 :(得分:0)

如果您希望在修改滚动视图时按钮保持固定的大小和位置,最好的方法是不要将它放在滚动视图中。将按钮添加到滚动视图的父视图,然后它不会受到滚动视图的任何更改的影响,并且可以覆盖在它上面。

答案 3 :(得分:0)

您应该将按钮放在滚动视图之外并将其锚定在页面底部。这样滚动视图中的内容将会更改,但您的按钮将在视图中保持静态固定。