clyne의 개발 기록

[Swift] iOS에서 Visibility GONE 하기 본문

iOS/Swift

[Swift] iOS에서 Visibility GONE 하기

clyne_dev 2021. 5. 3. 22:39

안녕하세요.

iOS 개발자 CNOO입니다!!!

 

 

제가 안드로이드 개발하면서, 가장 유용하게(?) 썼던 것이 Visibility.GONE 이라는  플래그였습니다.

안드로이드 개발하시다가 iOS개발을 시작하시면,  VISIBILITY.GONE 이 없어 당황해하시는데요

 

오늘은 iOS에서는 어떻게 해야하는지 알아보도록 하겠습니다.

 

 

iOS에서는 isHidden 이라는 프로퍼티로, 뷰가 보일지, 가릴지를 결정합니다.

 

자 , 그러면

이러한 뷰에서,

UIView2.isHidden = true

로  UIView2를 가리고, view1과 view3 사이를 좁혀주면 되는데요.

이게 가능하다면, 이렇게 하시면 금방 될것이고...

UIView2.snp.updateConstraint {
    $0.height.eqalTo(0)
}

 

문제는,  UIView2 안에 다른 뷰 들이 있으면, 쉽사리 높이를 줄일 수가 없습니다.

Constraint 관련 에러가 나기 때문이죠..

 

 

방법은 두 가지가 있습니다.

 


 

1. UIView3의 Top Constraint를 UIView1의 Bottom에 붙여주는 것입니다.

UIView2.isHidden = true
UIView2.snp.removeConstraints()

UIView3.snp.makeConstraints { 
    $0.top.equalTo(UIView1.snp.bottom).offset(10) // 간격 10
}

이렇게하면, 

 

UIView2의 공간이 사라지겠죠!

 

 

 


 

2. UIVIew 3개를  UIStackView 안에 넣어주는 것입니다.

 

저는 개인적으로 이 방법을 가장 선호합니다.

isHidden 하나만으로도  안드로이드의 VISIBILITY.GONE을 구현해낼 수 있습니다.


let stackView = UIStackView(arrangedSubviews: [UIView1,UIView2,UIView3])
stackView.spacing = 5
stackView.distribution = .fillEqually
stackView.axis = .vertical

self.view.addSubview(stackView)

stackView.snp.makeConstraints {
     $0.edges.equalToSuperview().offset(10)
}


// MAKR: - UIView2 GONE
UIView2.isHidden = true

 

특히, isHidden쪽에  애니메이션을 주게되면, expand & collapse도 구현해볼 수 있겠네요 ㅎㅎ

 

 

나름대로 풀어쓰려고 했는데, 잘 전달되었는지 모르겠네요.

더 좋은 방법이 있으면 공유 부탁드려요 ㅎㅎ

 

 

 

>