2017-04-27 8 views
1

更新:init(コーダー)のコードをlayoutSubviewsに移動することで、私の問題を解決できました。あなたのご意見ありがとうございます!UIViewがデバイスと一致するようにサイズを調整していません

私は基本的にチェスボードを構築し、他のUIから1:1の比率と一定数のポイントになるという制約があるビュークラスを持っています。 init(コーダー)では、ボードスペースを描画してから、コントローラーから描画する関数を呼び出しています。

しかし、私がシミュレータを実行すると、デバイスに基づいてロードされません。これは、現在Interface Builderで選択したものに限られます。

例として、私はiPhone 7 PlusをIBで選択していますが、iPhone 7でシミュレータを実行して、ボードを画面から外しました。 IBとシミュレータの両方でiPhone 7を選択してもうまく動作します。

私はこの問題の答えを見つけることが困難でした。どんな助けもありがとう。

Because Storyboard set to iPhone 7 Plus

Board too big on iPhone 7

アプリは最初のinitにスペースを描画する(コーダ):そして、これは私のコントローラによって呼び出され

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 

    let spaces: CGFloat = CGFloat(Constants.numberOfSpaces) 

    spaceMargin = 16 
    spaceWidth = (bounds.width - (spaces - 1) * spaceMargin)/spaces 
    spaceHeight = spaceWidth 
    pawnTop = bounds.height * (-3/304) 
    pawnMargin = bounds.width * (1/304) 
    pawnHeight = bounds.height * (48/304) 
    pawnWidth = bounds.width * (44/304) 

    pawnDict = [:] 
    spaceDict = [:] 

    for column in 0..<Constants.numberOfSpaces { 
     for row in 0..<Constants.numberOfSpaces { 
      let coordinate = try! Coordinate(column: column, row: row) 
      drawSpace(at: coordinate) 
     } 
    } 
} 

func updateBoard() { 

    guard let board = dataSource?.currentBoard() else { 
     return 
    } 

    // Remove previous pawns 
    for subview in subviews { 
     if let pawnView = subview as? PawnView { 
      pawnView.removeFromSuperview() 
     } 
    } 

    pawnDict = [:] 

    // Draw new pawns based on placement in board model 
    for column in 0..<Constants.numberOfSpaces { 
     for row in 0..<Constants.numberOfSpaces { 
      let coordinate = try! Coordinate(column: column, row: row) 
      let space = board.getSpace(coordinate) 
      if space.hasPawn { 
       drawPawn(at: coordinate) 
      } 
     } 
    } 
} 
+0

はあなたが自動レイアウト使用してスペースを描画コードを表示することができますか? – toddg

答えて

0

Iあなたの問題は、UIViewはその境界をinitに知らない。ビューのライフサイクルhereを見てください。あなたの問題を解決するには、自動レイアウトを使用してボードを描画するか、後でビューのライフサイクルが描画するまで待つかの2つのオプションがあります。

詳細情報here

+0

この情報は非常に貴重です!投稿していただきありがとうございます!私はそれを私の初期コードをlayoutSubviewsに移動することによって動作させることができました –

+0

私にチェックマークbrothaを与えて – toddg

+0

申し訳ありません、新しいstackoverflowへ。チェック! :) –

関連する問題