2016-11-26 4 views
0

私はスクロールビューの中にいくつかのラベルを持っています。各ラベルは「ページ」です。しかし、オフセットは正しくありません。そして私は問題を見つけることができません。UIScrollViewが間違ってオフセット

マイコード:

let quantity = 10; 
var width : CGFloat = 0.0; 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     width = self.scrView.frame.width; 

     for i in 0..<quantity { 

      let xPos = width * CGFloat(i); 
      let label = UILabel(frame: CGRect(x: xPos, y: 0, width: width, height: self.scrView.frame.height)) 
      label.textAlignment = .center 
      label.font = UIFont(name: "Helvetica Neue", size: 50) 
      label.textColor = UIColor.white 
      label.text = "\(i + 1)" 

      label.backgroundColor = .randomColor() 
      scrView.addSubview(label); 
     } 

     scrView.contentSize.width = width * CGFloat(quantity + 1); 

    } 

左側にピンクの色は、前の「ページ」からです。

enter image description here

そして再び、前回(数8)のページから左側に紫の色に注意してください。

enter image description here

最初のページには、罰金です。しかし、数値が大きいほどオフセットが大きくなります。私は1つのラベルのための可視領域全体をカバーしたい。

誰かが解決策を知っていますか?

答えて

1

あなたのコードはうまく動作します。

の自動レイアウトの結果として、scrollviewのサイズがviewDidLoadの後に変更できることに注意してください。 scrollViewを設定するより良い場所は、viewDidLayoutSubviewsの上書きになります。それまでにscrollViewのサイズが設定されます。しかし、viewDidLayoutSubviewsは複数回実行されるので注意してください。そのため、scrollViewを1回だけ設定してください。


これはあなたのバグではありませんが、contentSize.widthが大きすぎます。 scrollworkコンテンツ領域に正確にquantityラベルがあるので、1quantityに追加する必要はありません。

scrView.contentSize.width = width * CGFloat(quantity) 

また、スウィフトは、ラインの両端に;を必要とするので、これらを削除しません。

関連する問題