2009-05-12 2 views
4

고정 값으로 neb에서 내보기의 높이를 설정할 때 문제가 발생하는지 궁금합니다.iPhone 앱 레이아웃을 유연하게 디자인하는 것이 중요합니까?

예 : 상태 표시 줄의 높이를 알고 있습니다. 그것은 20 단위입니다. 따라서 멋진 인터페이스를 보여주는보기를 만들 때 사용자가 앱을 사용하는 동안 전화를 걸었을 때 상태 표시 줄의 높이가 증가하면 어떻게 될까요? 아니면 언젠가 애플이 언젠가 상태 바 또는 탭바의 높이를 바꾸면 어떨까요?

내부 인터페이스 요소가 모두있는 컨테이너보기에는 항상 자동 크기 조정 기능을 사용합니까? 당신의 패턴은 무엇입니까?

답변

7

상태 표시 줄, 도구 모음 등의 높이를 하드 코딩 값으로 명확히 조정할 것입니다. 이 값들이 어떻게 동적이며 미래에 변할 수 있는지에 대한 좋은 예를 제시합니다. 당신이 지원할 수도 있고 지원하지 않을 수도있는 다른 일반적인 시나리오는 사용자가 iPhone을 가로 방향으로 돌릴 수있는 능력입니다.

항상 컨테이너의 하위 뷰 레이아웃을 유연하게 유지하려고 시도합니다. 자동 크기 조정 기능을 사용하는 것이 좋은 방법입니다. 귀하의 질문은 좋은 것입니다 그리고 나는 내 자신의 레이아웃 전략을 검토하게 만들 것이라고 생각합니다!

+0

감사! 상태 표시 줄이나 탭 표시 줄이 커지거나 작아 질 때 이러한 이벤트를 테스트하는 방법을 알고 싶습니다. – Thanks

+2

다음은 내가 사용하는 간단한 방법 중 하나입니다. 시뮬레이터에서 애플리케이션을 실행 한 다음 하드웨어 -> 통화 상태 표시 줄 전환으로 이동하십시오. 상태 표시 줄이 커집니다. 동일한 메뉴 옵션을 선택하여 상태 표시 줄을 원래 크기로 되돌립니다. –

+0

동일한 메뉴를 사용하여 장치를 좌우로 회전하여 가로 방향으로 배치 할 때 레이아웃을 체크 아웃 할 수 있습니다. –

4

저는 항상 디자인에 집중하고 컴퓨터가 계산할 수 있도록 자동으로 크기를 조정하는 유연한 레이아웃을 사용합니다.

[편집] 내 이유는 무언가가 바뀌고이 경우 다시 수학하고 싶지 않다는 것입니다. 변경할 수 있습니다 것들 :

  • 사용자가 더 큰 글꼴
  • 장치의 다음 세대들이 픽셀 좁은 공간에 단어를 맞게해야 할 때
  • 번역이 싫어 더 큰 화면을 얻을 수를 선택할 수 있습니다
  • 부가 기능은 몇 픽셀에 의해 화면의 크기를 변경할 수있는 화면
  • 운영 체제의 변화를에 몇 픽셀까지 걸릴 수 있습니다 내가 미리 정의 된 아이콘을 사용하고 때
  • , 크기는
  • 이 변경 될 수 있습니다
  • 궁극적으로, 유연한 응용 프로그램에서 사용자는보고 싶은 것을 선택할 수 있습니다. 나는 그녀가 UI를 레이아웃해야하는 것을 원하지 않는다.

레이아웃을 정적으로 만들면 결국 다시해야합니다. 그리고 다시. 당신이 소프트웨어 개발의 유일한 상수가 변화한다는 것을 알게 될 때까지.

+0

하지만 무엇을할까요? 당신은 당신의 공간을 정확하게 사용하고 있습니까? IE의 화면에 완벽하게 배치 된 컨트롤이 가득 찼습니까? – Thanks

+0

뭔가가 생길 것입니다. 항상 그렇습니다. –

0

Apple 제공 파일 "Constants.h"에는 이러한 크기가 대부분 있지 않습니까? (방금 UICatalog SDK 예제의 일부인 것으로 나타났습니다).

나는 애플이 언젠가 더 크거나 작은 화면을 가진 다른 장치를 시작할 것이라고 생각한다.따라서 [UIScreen frame/bounds]와 함께 사용해야합니다.

// these are the various screen placement constants used across all the UIViewControllers 

// padding for margins 
#define kLeftMargin    20.0 
#define kTopMargin    20.0 
#define kRightMargin   20.0 
#define kBottomMargin   20.0 
#define kTweenMargin   10.0 

// control dimensions 
#define kStdButtonWidth  106.0 
#define kStdButtonHeight  40.0 
#define kSegmentedControlHeight 40.0 
#define kPageControlHeight  20.0 
#define kPageControlWidth  160.0 
#define kSliderHeight   7.0 
#define kSwitchButtonWidth  94.0 
#define kSwitchButtonHeight  27.0 
#define kTextFieldHeight  30.0 
#define kSearchBarHeight  40.0 
#define kLabelHeight   20.0 
#define kProgressIndicatorSize 40.0 
#define kToolbarHeight   40.0 
#define kUIProgressBarWidth 160.0 
#define kUIProgressBarHeight 24.0 

// specific font metrics used in our text fields and text views 
#define kFontName    @"Arial" 
#define kTextFieldFontSize  18.0 
#define kTextViewFontSize  18.0 

// UITableView row heights 
#define kUIRowHeight   50.0 
#define kUIRowLabelHeight  22.0 

// table view cell content offsets 

#define kCellLeftOffset   8.0 
#define kCellTopOffset   12.0 

토니

+0

나는 이 파일을 살펴보고 재미있는 파일이라고 생각하고 OS X SDK 또는 iPhone SDK에서 UIConstants.h 파일에 대한 참조를 찾을 수 없습니다. 뭔가가 누락되었거나이 파일의 이름이 다를 수 있습니까? – mmc

3

글쎄, 난 여기 사지에 밖으로 갈거야,하지만 난 생각 하드 코딩 레이아웃 차원의 생각 (이, 오늘, 아이폰, 픽셀에) 이론적으로 수 앞으로 문제가 생길 수 있습니다. (또는 적어도 추가 작업을하십시오.)

상태 표시 줄의 크기, 기본 탭 표시 줄 또는 탐색 모음의 변경에 대해별로 신경 쓰지 않습니다 ... 변경되는 단위가 걱정됩니다. 저는 등록 된 OS X 개발자는 아니지만 오랫동안 Snow Leopard가 픽셀을 기반으로하지 않고 인터페이스를 지정하는 해상도 독립적 인 방법을 지원할 것이라는 소문이있었습니다.

내일이나 3.0 또는 어쩌면 내년에도 그런 일은 일어나지 않을 것입니다.하지만 해상도 독립적 인 인터페이스에 대한 이러한 생각은 특히 디스플레이 크기 (특히 디스플레이 해상도)와 같이 아이폰을 만들기위한 것입니다. 미래의 변화.

길어지고 있지만 상태 바의 크기가 아니기 때문에 장래에 바뀌는 것은 기기의 크기와 코코아 터치에서 크기를 지정하는 데 사용하는 단위입니다.

+1

iPhone에는 이미 해상도 독립 인터페이스가 있습니다. 픽셀을 지정하지 않습니다. 단위를 지정하십시오. iPhone의 경우 현재 하나의 단위가 하나의 픽셀입니다. 그러나 이것은 미래에 바뀔 수 있습니다. – Thanks

+0

글쎄, 내가있을거야. 네가 옳아. 현재 스크린 폼 팩터 1 단위 = 1 픽셀이기 때문에 결코 생각해 본 적이 없었습니다. 이것은 장치의 크기 나 해상도가 변경 될 때 매우 중요합니다. – mmc

+0

예, 디스플레이 크기가 변경되거나 더 중요한 가로 세로 비율이 변경되면 일부 Apps가 문제가 발생합니다. 그러나 현재 화면 크기가 하나뿐이므로 걱정하지 않아도됩니다. 그들이 정말로 iPhone nano를 가져온다면 조금 돌아 가야 할 것입니다.)하지만 이것이 내가 수백만 개의 화면 크기와 종횡비를 가진 Google Android가 아닌 iPhone OS를 선택한 이유입니다. – Thanks

1

한 가지 생각할 사항 : 사용자가 전화를 걸고 전화 통화 중에 응용 프로그램을 시작하면 상태 표시 줄의 높이가 변경됩니다. 따라서 시스템 UI 요소의 높이에서 하드 코딩을 피하는 것이 반드시 필요합니다.

1

UICatalog 샘플에서는 "constants.h"를 사용하지만이 샘플은 로컬이므로 샘플 개발자가 쉽게 자신의 삶을 편하게 할 수 있습니다. 그것은 위에 언급 된 모든 문제를 담고 있습니다. 미래에 "표준 크기"가 바뀌면이 샘플은 올바르게 작동하지 않습니다.

게재 위치를 확보하기 위해 다른 개체를 쿼리해야하지만 환경이 바뀌면 올바르게 작동하는 방식입니다. 확장 된 "통화 중"상태 표시 줄은 완벽한 예입니다. 상태 표시 줄을 피하기 위해 20 "단위"를 하드 코딩하면 앱이 통화 도중 끊어집니다. 그리고 그것은 시뮬레이터에서 눈치 채지 못할 것입니다. (시뮬레이터에서이 옵션을 시도 할만큼 충분히 생각했다면 앱을 코딩하는 동안 생각했을 것입니다.)

+0

당신은 옳은 사람입니다. 감사. – Thanks

관련 문제