更新: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
がアプリは最初の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)
}
}
}
}
はあなたが自動レイアウト使用してスペースを描画コードを表示することができますか? – toddg