2017-06-13 4 views

答えて

0

スクロールビューを変更したときにボタンを一定のサイズと位置に維持するには、スクロールビューにボタンを配置しないことをおすすめします。スクロールビューの親ビューにボタンを追加すると、スクロールビューの変更の影響を受けず、その上にオーバーレイすることができます。

+0

これは最も簡単な方法ですか? –

+0

はい、これが最も簡単な方法です。それ以外の場合は、スクロールビューがスクロールビューをスクロールして静的に見えるようにする場合は 'scrollViewDidScroll:'を実装する必要があり、スクロールビューが拡大表示されるようにボタンの変換をリセットするには 'scrollViewDidZoom:'同じサイズを保つ。これはよりコストがかかり、実装するためにより多くの作業が必要になります。 'UIScrollView'階層の外側にボタンを追加すると、特別な作業は必要ありません。 – Dima

0

ボタンをスクロールビューの外側に配置し、ページの下部に固定する必要があります。このようにして、スクロールビューのコンテンツは変更されますが、ボタンはビューに静的に固定されたままになります。

0

iOS 11の場合、UIScrollViewのインスタンスプロパティはframeLayoutGuideです。スクロールビューの非形質転換フレーム矩形に基づい

var frameLayoutGuide: UILayoutGuide { get } 

レイアウトガイド:frameLayoutGuideは、次の宣言を有しています。

あなたはそのコンテンツの長方形とは対照的に、明示的に、スクロールビュー自体のフレーム矩形を伴う自動レイアウトの制約を作成する場合、このレイアウトガイドを使用してください。


以下スイフト4 UIViewController実装はUIScrollView内部UIButtonをセンタリングするために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

関連する問題