The issue is resolved. 
class GameScene: SKScene { var ground : SKTileMapNode! override func didMove(to view: SKView) { self.ground = self.childNode(withName: "//ground") as! SKTileMapNode let tileSize = self.ground.tileSize for col in 0..<self.ground.numberOfColumns { for row in 0..<self.ground.numberOfRows { let definition = self.ground.tileDefinition(atColumn: col, row: row) guard let texture = definition?.textures.first else { continue } let x = CGFloat(col) * tileSize.width + tileSize.width / 2.0 let y = CGFloat(row) * tileSize.height + tileSize.height / 2.0 let tileNode = SKNode() tileNode.position = CGPoint(x: x, y: y) tileNode.physicsBody = SKPhysicsBody(texture: texture, size: texture.size()) tileNode.physicsBody?.affectedByGravity = false tileNode.physicsBody?.isDynamic = false self.addChild(tileNode) } } } }
In this example, the scaleMode of the scene is .resizeFill
The scene itself and the map layer (self.ground) have anchorPoint = CGPoint (x: 0, y: 0)
PS While this is a test version, because it is not yet known what will happen with large maps, well, I think I should add that the physics would fall solely on the extreme cells.