Hi yoahn 개발블로그

[iOS] constraint, stackview 본문

프로그래밍 언어/iOS

[iOS] constraint, stackview

hi._.0seon 2021. 2. 20. 19:29
반응형

1. StackView 에 UIImageView가 붙은 UIView 를 붙이면 제거가 제대로 안되는 문제

카드게임 앱을 만들다가, 게임참가자별 나눠준 카드를 화면에 출력하는 과정에서 버튼 아래의 것들은 하나의 스택뷰 vertical 로 넣고, 카드 이미지는 하나의 UIView에 넣고 스택에 넣었었는데 화면이 새로 바뀌는 과정에서 기존 뷰를 stack.removefromSuperView를 통해 제거하고 stack 에는 새로운 객체를 생성했는데 이미지가 바뀌는 것이 아니라 계속 새로 추가되는 문제가 있었다.

그래서 UIView에 넣었던 것을 UIStackView로 바꿔서 넣었더니 잘 동작했다!

이유는 잘 모르겠다. (혹시 아시는 분은 댓글로 알려주세요!!!)

 

2. 최상위 스택뷰의 제약조건 설정하기

코드로 설정하는 방법

 

먼저 뷰의 auto 제약조건을 꺼줘야 한다.

var stackView: UIStackView

stackView.translatesAutoresizingMaskIntoConstraints = false

stackView.topAnchor.constraint(equalTo: playerbutton.bottomAnchor, constant: 15).isActive = true
stackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true
stackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -50).isActive = true

내부에 또 다른 뷰가 들어가는 경우 크기나 위치 설정이 필요한 경우 constraint를 이용해 제약조건 설정해야 원하는 위치와 크기로 잘 들어감

카드이미지가 들어간 스택 뷰의 imageView frame 값을 변경했더니 제대로 동작하지 않음

 

3. 화면 Refresh 하기

구현 조건에 쉐이크 이벤트가 일어나면 게임을 재시작하여 새로운 화면을 보여주는 조건이 있었다.

 

쉐이크 이벤트가 일어나는 화면에서 self.becomeFirstResponder()를 해주고, motionEnded를 오버라이드하여 shake 이벤트가 일어나는 경우 기존에 있던 stack 뷰를 제거하고 다시 생성하는 과정 진행

 

harrythegreat.tistory.com/entry/IOS-Auto-layout-코드-예시

 

[IOS] Auto layout 코드 예시

[SWIFT] 수동으로 auto layout 잡아주기 스토리보드로 하나하나 드래그해주어도 되지만 가끔은 수동으로 잡아주어야 할 때가 있다. 이럴경우 contentView.translatesAutoresizingMaskIntoConstraints = false처럼..

harrythegreat.tistory.com

 

반응형
Comments