본문 바로가기

아이폰/안드 개발자 시점

[iOS] Autolayout, Android 에서 View가 Gone되는 효과 구현하기

반응형

안드로이드에서 view에 visibility 속성은 view를 화면에 노출할 것인지 여부를 설정합니다. 단순하게 노출 여부를 설정하기도 하지만 

비노출시 2가지를 선택할 수 있습니다. 

눈에는 보이지 않지만 영역은 존재하는 경우눈에도 보이지 않고 영역조차 사라지는 경우로 나뉩니다. ( invisible / gone ) 

※노출하는 경우 visible 

차례대로 visible / invisible / gone

안드로이드에선 gone 옵션을 줄 경우 다음 순서에 있거나 constraint로 연관되어 있는 view가 영역을 저절로 채워줍니다.

하지만 iOS에서 오토레이아웃을 사용했을 경우 위 그림상 'B' 뷰를 hidden 처리할 경우 invisible처리 처럼 영역은 그대로 남아 있어 별도로 처리해야 합니다.

 

1.  hidden처리시 Constraint를 직접 조정한다.

2. StackView를 사용한다. 

| Constraint 직접 조정 

아래 사진처럼 버튼 세개의 constraint를 지정하고, 도큐먼트 영역이나 스토리보드에서 우클릭으로 보조 편집기 영역에 끌어 놓으면 Constraint를 변수로 사용할 수 있습니다. 

class ViewController: UIViewController {

    @IBOutlet weak var secBtnTopConst: NSLayoutConstraint!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        secBtnTopConst.constant = 100
    }
    
}

그렇게 생성된 constraint 변수의 값을 hidden시 'constraint.constant = 0'으로 조정하면 됩니다.

| StackView 사용

StackView의 높이는 내부에 있는 view의 영향을 받기 때문에 hidden 처리할 view를 stackView로 감싼 후 hidden 처리하면 자연스럽게 영역이 줄어듭니다.

ex) 위의 경우 2번째 버튼을 statckView에 넣고 stackview와 다른 버튼들의 constraint를 설정 

stackview에서 hidden처리시 ( 우 )

 

iOS를 개발하면서 안드로이드와 다르게 느껴지는 부분들을 위주로 기술하겠습니다.

감사합니다.

반응형