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()
}
}
コードは完全に機能していますが、ビューにbuttonOneを追加することには小さな問題があります。
ScrollViewにあるcontainerViewではなく、self.view(self.viewのサブビュー)にbuttonOneを追加しました。
次のコードを使用する必要があります
containerView.addSubview(buttonOne)
の代わりに
self.view.addSubview(buttonOne)
したがって、次の行を使用する必要があります
containerView.userInteractionEnabled = true