2017-06-13 63 views

回答

0

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

+0

这是最简单的方法吗? –

+0

是的,这是迄今为止最简单的方法。否则,当滚动视图滚动以使其显示为静态时,您需要实现'scrollViewDidScroll:'来更改按钮的位置,并且当滚动视图缩放以使其显示时,可以重置按钮的变换保持相同的大小。这是更昂贵的,需要更多的工作来实施。如果在“UIScrollView”层次结构中添加按钮外部,则不需要额外的工作。 – Dima

0

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

0

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

var frameLayoutGuide: UILayoutGuide { get } 

基于滚动视图的未转化的框架矩形的布局引导。

使用时要创建自动布局的限制,明确涉及滚动视图本身的框架矩形,而不是它的内容矩形此布局指南。


以下雨燕4 UIViewController实现了如何以居中UIButton一个UIScrollView内使用frameLayoutGuide

import UIKit 

class ViewController: UIViewController { 

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

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
    } 

    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 
    } 

} 
0

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

enter image description here

这里是裁判。每个视图的位置层次结构的快照。

enter image description here