• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

uiview가 안 보이는 경우

23.01.12 20:37 작성 조회수 268

0

안녕하세요, uiview 관련 질문이 있는데요.

library에서 uiview를 선택해서 autolayout에서 safe area 기준으로 위에서 100~200정도, 양쪽(좌우) 간격을 20, 20 이런식으로 맞춘 뒤, 가운데 정렬 (horizontally in container)을 한 뒤에 시뮬레이션을 돌려보면 uiview가 화면 상에 나타나지 않습니다. 아무 숫자나 입력을 시도해보았는데 우연찮게 잠깐 나타난 것을 보니 숨겨지거나 레이어 밑으로 들어갔다기보다는, 수치 설정이 잘못된 것 같은데요. 이 경우 어떻게 해결해야 할까요?

숫자 빙고 앱 만들 시에도 똑같이 한다고 한 것 같은데 비슷한 오류가 발생했었다가 운좋게 해결됐었거든요. 제가 놓치고 있는 부분이 있는 건지 궁금합니다. label이나 button은 이런 오류가 없는데 uiview만 계속 이 문제가 반복됩니다.

답변 1

답변을 작성해보세요.

0

안녕하세요 밍ㅇ밍 님.

지금 말씀하신 것중에 뷰의 높이(height) 기준은 왜 없을까요? 뷰가 높이를 얼마로 가져가야 하는지 모르니까 화면에 나타나지 않는게 아닐까요? 스토리보드엔 나타나나요??
레이블이나 버튼 같은 경우 기본적인 높이(본질적인 높이)를 내장하고 있기 때문에 높이가 없어도 에러가 나지 않는 반면에 뷰 같은 경우 높이가 없으면 에러가 날 수 있습니다.

그리고 만약에 높이를 주었는데도 나타나지 않는다면.. 제가 지금 들어본 말씀만 가지고는 판단하기는 어렵습니다... (분명 수업에서 설명드리는 내용 중에 빠뜨리신 것이 있는 것 같아요.)

we.love.code.allen@gmail.com 로 프로젝트를 앞축해서 보내주시면 확인을 도와드리도록 할께요.

감사합니다..!

밍ㅇ밍님의 프로필

밍ㅇ밍

질문자

2023.01.12

답변 바로 주셔서 감사합니다! 우선 아예 새 플젝을 따로 파서 말씀해주신 내용대로 다시 해본 뒤 질문드리겠습니다. 저도 더 구체적으로 질문하고 싶은데 말씀드린 내용이 전부라ㅠㅠ 만약 안 되면 스크린캡쳐 첨부하여 질문드릴게요 감사합니다

 

*스토리보드에는 정상적으로 나타납니다..!

스토리보드에 오류 없이 정상적으로 나타나면.. 시뮬레이터 오류 일수도 있어요! 최근에 시뮬레이터 부분에서 오류가 조금 발생한다는 것으로 들어서요!

https://stackoverflow.com/questions/70916225/map-table-argument-null-xcode-error-when-i-click-button-in-simulator


시뮬레이터를 업그레이드 하시면 사라질 수도 있기도 하고.. 그렇다고 하네요! (일단은 다시 새 프로젝트를 도전해보신다고 하셨으니.. 시도해보시고 알려주세요 :)

밍ㅇ밍님의 프로필

밍ㅇ밍

질문자

2023.01.13

새 프로젝트에 동일 조건으로 해보았는데 height이 진짜 문제였던 것 같습니다..!! 다른 부분은 그대로 두고 height만 constraint 추가했더니 정상적으로 해결됐어요. 감사합니다 !!

 

(기존에 safe area로부터 여백 20, 20 이런식으로 하면 자동으로 width가 맞춰지는 걸 보고 height도 굳이 따로 constraint 설정을 안 해도 되는 줄 알았어요.)

네네 컴퓨터는 시킨 일만 할줄 아는 녀석이니까, 소중하게 잘 다뤄주세요ㅎㅎ

문제를 해결하셔서 다행이네요 :) 화이팅!!!

제민우님의 프로필

제민우

2023.07.08

안녕하세요 앨런님 저도 비슷한 상황을 겪어서 질문 덧붙입니다! 높이 제약을 주면 뷰가 나타나기는 한데 여러 디바이스를 타겟으로 하는 앱을 만들 때는 높이를 고정하면 오토레이아웃의 의미가 사라지지 않나? 라는 고민이 생깁니다.
여러 디바이스를 타겟으로 하는 앱을 만들 때 높이제약을 특정 상수값으로 고정해도 되나요? 아니면 디바이스의 화면 크기에 따라 높이를 자동으로 조절해주는 메서드가 있을까요?

@제민우
일반적으로 출시하는 앱들의 경우, 컨텐츠를 보여줘야 해서.. 기기 크기가 조금씩 달라도 높이를 고정하는 경우도 많이 있습니다. 물론 이것은 기획이나, 디자인 부서에서 제안하는 내용을 따라가는 경우가 많고요.
(개발자가 결정하는 경우는 거의 없죠.)

물론, 오토레이아웃 자체는.. 높이(height)를 고정시켜서 구현하는 경우도 있고,
화면 비율로 오토레이아웃을 줄수도 있습니다.

someView.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 0.5).isActive = true

다만, 위 코드처럼 오토레이아웃을 주는 방법은 거의 똑같습니다.

코드로 UI를 구현하는 부분을 잘 보셨으면, 위의 코드만 보여도 어느정도 이해하시겠지만,
someView의 높이를.. 뷰컨트롤러의 기본뷰(self.view)의 높이에 비율 제약으로..
50%비율로 높이를 주는 코드입니다.

즉,
높이제약을 ===> heightAnchor
50% 배율로 ===> multiplier: 0.5
제약을 주는 코드입니다.

(이렇게 구현하시면.. 기기 크기가 어떻게 달라지던 간에..
일단은 뷰 컨텐츠는 전체 높이의 50% 높이로 보여주게 되겠죠.)


이런 코드는 검색을 하시면 많이 찾으실 수도 있고, 챗GPT에게,
"uikit에서 기기의 화면 높이에 대해 비율로 어떤 특정 뷰의 높이를 오토레이아웃을 코드로 짜는 예시를 알려줘."
이런식으로 물어보면.. 답변을 충분히 얻으실 수 있으니, 한번 도전해 보시길 바라요!

물론, 실무에서는..
해당 기기 뷰의 높이를... 일반적으로 기기별로 어떤 식으로 보여줄 것인지는..
디자이너가 보통 결정하는 내용들 입니다.
(저는 컨텐츠의 내용에 따라, 높이를 고정으로 할지 / 비율로 할지.. 여러가지 케이스에 따라 달라지는 것 같아서.. 정답은 없다고 생각합니다.)

감사합니다. :)

제민우님의 프로필

제민우

2023.07.09

@앨런 아하 그렇군요ㅠㅠ 항상 친절한답변 너무 감사드립니다!!!