I want to reproduce Super-Mario for iOS using Swift and SpriteKit. I use SKPhysics-bodies to simulate collisions between the player and the environment. The player and all objects have their own SKPhysicsBody (rectangle of their size). But when the player jumps against a brick (from top left or top right) like this, the player stucks in the air.
My assumption is that when the two SKSpriteNodes collide, they overlap a tiny bit. And the SKPhysics-Engine thinks that the player is on top of the middle brick because the player is a tiny bit inside the brick above and falls down on the middle brick.
So my question is: How can i prevent SKSPriteNodes from overlapping? Or how can i fix this?
P.S. If you need more information to answer, please tell me!
EDIT: Some Code of the Brick Class:
import SpriteKit
class Brick: SKSpriteNode {
    let imgBrick = SKTexture(imageNamed: "Brick")
    init(let xCoor: Float, let yCoor: Float) {
        // position is a global variable wich is 1334/3840
        super.init(texture: imgBrick, color: UIColor.clearColor(), size: CGSize(width: 80*proportion, height: 80*proportion))
        position = CGPoint(x:Int(xCoor*667)+Int(40*proportion), y:Int(375-(yCoor*375))-Int(40*proportion))
        name = "Brick"
        physicsBody = SKPhysicsBody(rectangleOfSize: self.size)
        physicsBody?.affectedByGravity = false
        physicsBody?.dynamic = false
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
and my Player Class
import SpriteKit
class Mario: SKSpriteNode {
    let atlas = SKTextureAtlas(named: "Mario")
    var imgMario = [SKTexture]()
    var action = SKAction()
    init(let xCoor: Float, let yCoor: Float) {
        for(var i = 1; i < 24; i++) {
           imgMario.append(atlas.textureNamed("X\(i)"))
        }
        super.init(texture: imgMario[0], color: UIColor.clearColor(), size: CGSize(width: 120*proportion, height: 160*proportion))
        position = CGPoint(x:Int(xCoor)+Int(60*proportion), y:Int(yCoor)-Int(90*proportion))
        name = "Mario"
        physicsBody = SKPhysicsBody(rectangleOfSize: self.size)
        physicsBody?.allowsRotation = false
        action = SKAction.repeatActionForever(SKAction.animateWithTextures(imgMario, timePerFrame: 0.03, resize: false, restore: true))
        runAction(action, withKey: "walking")
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
and SOME PART of my Level Class
class Level: SKScene, SKPhysicsContactDelegate {
    var motionManager = CMMotionManager()
    var mario = Mario(xCoor: 100, yCoor: 90)
    var world = SKSpriteNode()
    let MarioCategory: UInt32 = 0x1 << 0
    let BrickCategory: UInt32 = 0x1 << 1
    /*
    Some more code...
    */
    func setUpPhysics() {
        physicsWorld.contactDelegate = self
        mario.physicsBody!.categoryBitMask = marioCategory
        mario.physicsBody?.collisionBitMask = brickCategory
        mario.physicsBody?.contactTestBitMask = brickCategory
        for(var i = 0; i < world.children.count; i++) {
            if(world.children[i].name == "Brick") {
                world.children[i].physicsBody?.categoryBitMask = brickCategory
                world.children[i].physicsBody?.collisionBitMask = marioCategory
                world.children[i].physicsBody?.contactTestBitMask = marioCategory
                world.children[i].physicsBody?.friction = 0
            }
        }
    }
}