Swift SnapKit, как компоновать UIView с относительным положением

func setupPosition() {
        box.snp.makeConstraints{(make)->Void in
        make.edges.equalTo(view).inset(UIEdgeInsetsMake(64+20, 20, 250, 20))
        }

        textField.snp.makeConstraints{(make)->Void in
            make.edges.equalTo(box).inset(UIEdgeInsetsMake(5, 5, 150, 5))

        }

        stackBoxOne.snp.makeConstraints{(make)->Void in
                make.top.equalTo(box).offset(textField.frame.size.height)
                make.left.equalTo(box).offset(5)
                make.bottom.equalTo(box).offset(-90)
                make.right.equalTo(box).offset(-5)
        }
    }

Я хочу поместить stackBoxOne под textField. Но приведенный выше код не работает. Как я могу изменить код? Цените свое время.


person littlebear333    schedule 11.11.2016    source источник


Ответы (1)


Вы не можете использовать textField.frame внутри закрытия makeConstraints, потому что представления не были размещены в этой точке. Из-за этого высота равна 0, а stackBoxOne получает смещение 0.

Чтобы разместить вид под другим видом, вы соединяете его верхнее ограничение с нижним ограничением другого вида. Итак, в вашем случае:

stackBoxOne.snp.makeConstraints{(make)->Void in
     make.top.equalTo(textField.snp.bottom)
     make.left.equalTo(box).offset(5)
     make.bottom.equalTo(box).offset(-90)
     make.right.equalTo(box).offset(-5)
}

В дополнение к этому вы также можете установить левое и правое ограничение равным textFields левому и правому ограничению следующим образом:

stackBoxOne.snp.makeConstraints{(make)->Void in
    make.top.equalTo(textField.snp.bottom)
    make.left.right.equalTo(textField)
    make.bottom.equalTo(box).offset(-90)
}
person joern    schedule 13.11.2016