2016-08-11 16 views
0

私が作成し、私のUIScrollViewを初期化する方法である:UIScrollViewの幅と高さの制御

class MyViewController: UIViewController, UIScrollViewDelegate{ 

    let items = 20, heightPerItem: CGFloat = 40; 
    var scrollView: UIScrollView! 
    var contentView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     scrollView = UIScrollView(frame: view.bounds) 
     contentView = UIView(frame: view.bounds) 

     scrollView.backgroundColor = UIColor.blackColor() 
     scrollView.autoresizingMask = UIViewAutoresizing.FlexibleHeight 

     var yStart: CGFloat = 0 - heightPerItem 
     for i in 0 ..< items { 
      yStart += heightPerItem 
      let label = UILabel(frame: CGRect(x: 0, y: yStart, width: self.view.bounds.size.width, height: heightPerItem - 1)) 
      label.text = "\(i) testing..." 
      label.backgroundColor = UIColor.brownColor() 
      scrollView.addSubview(label) 
     } 

     view.addSubview(scrollView) 
    } 

    override func viewDidLayoutSubviews() { 
     scrollView.addSubview(contentView) 
     scrollView.contentSize.height = heightPerItem * CGFloat(items) 
    } 
} 

そして、ここでは、出力されます。

enter image description here

私は姿勢の変化を試したことがない場合、それは大丈夫でした:

enter image description here

ので、次の2点を見てみてください。

  1. scrollViewは(少なくとも私はscrollView.contentSize.height = heightPerItem * CGFloat(items)を行うにはしたくない)、自動的に高さを取得する他の方法はありますか?
  2. scrollViewの幅が方向変更だけで変更されるようにコードを書き直すにはどうすればよいですか?

答えて

0

私はあなたのコードに小さな変更を加えたと

scrollView.autoresizingMask = [UIViewAutoresizing.FlexibleHeight, .FlexibleWidth] 

let label = UILabel(frame: CGRect(x: 0, y: yStart, width: self.view.bounds.size.height, height: heightPerItem - 1)) 

を置き、それは風景の中に幅の問題を解決しました。

あなたは向きの変更は、あなたが例えば、viewWillTransitionToSize funcを上書きすることができたときにサイズ変更を制御する場合:

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 

    if UIDevice.currentDevice().orientation.isLandscape { 
     print("Landscape") 
    } else { 
     print("Portrait") 
    } 


} 

また、一部1.私の知る限りでは、UIScrollViewのは最大になります性質を持っていませんy座標が、我々はこのような小さなコードにすることができます。

func rectMax() -> CGRect { 
     var cR = CGRectZero 
     for sv in scrollView.subviews { 
      cR = CGRectUnion(cR, sv.frame) 
     } 

    return cR 
} 

、あなたが使用することができますより:

 scrollView.contentSize = rectMax().size 
+0

素晴らしい!しかし、それはポイントです:2.もう一度試してください1 –

+0

希望、これは役立ちます – tosha

関連する問題