web-dev-qa-db-ja.com

UIScrollViewプログラムでSwift

Swift(私のオブジェクトはプログラムであるため、IBで自動レイアウトを使用することはできません)でプログラムで水平および垂直スクロールを正確に有効にする方法を見つけることができませんでした。

私が従ったチュートリアルでは、意図したとおりに両方の方法でスクロールできます。問題は、スクロールする場所に関係なく、ボタンが画面の一部を占める同じ場所に留まることです。私は別のチュートリアルでこれと同じ結果を得ましたが、なぜこれが起こっているのかについてかなり混乱しています。

私はこれに対する答えを見つけることができなかったので、他の誰かがこれが有益であると思うと思います。

これが私が持っているコードです。このチュートリアルに基づいて、非常に基本的なプロジェクトを作成しました。 http://koreyhinton.com/blog/uiscrollview-crud.html

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {


    var scrollView: UIScrollView!
    var containerView = UIView()



    override func viewDidLoad() {
        super.viewDidLoad()

    let buttonOne = UIButton.buttonWithType(UIButtonType.System) as UIButton


        buttonOne.frame = CGRectMake(10, 50, 50, 50)
        buttonOne.backgroundColor = UIColor.greenColor()
        buttonOne.setTitle("test", forState: UIControlState.Normal)
        buttonOne.addTarget(self, action: "buttonAction1x1:", forControlEvents: UIControlEvents.TouchUpInside)

        self.scrollView = UIScrollView()
        self.scrollView.delegate = self
        self.scrollView.contentSize = CGSizeMake(1000, 1000)

        containerView = UIView()


        scrollView.addSubview(containerView)
        view.addSubview(scrollView)
        self.view.addSubview(buttonOne)


    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        scrollView.frame = view.bounds
        containerView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)
    }



    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


}
23
user3246092

コードは完全に機能していますが、ビューにbuttonOneを追加することには小さな問題があります。

ScrollViewにあるcontainerViewではなく、self.view(self.viewのサブビュー)にbuttonOneを追加しました。

次のコードを使用する必要があります

containerView.addSubview(buttonOne)

の代わりに

self.view.addSubview(buttonOne)
9
Pankaj purohit

したがって、次の行を使用する必要があります

containerView.userInteractionEnabled = true
3
Samrez Ikram