2009-07-06 2 views
9

자동 회전을 지원하는 사용자 지정 UINavigationController가 있습니다. 또한 내보기 중 하나에 UIDatePicker가있어서 Navigation 컨트롤러 스택에 던져 넣습니다. 날짜 선택 도구보기를 세로로 시작한 다음 회전하면 자동 회전이 작동합니다. 내가보기에 날짜 피커보기를로드하려고하면보기가 엉망입니다. 회전을 지원하지 않고 프레임이 피커의 절반 정도만 보이고 중심을 벗어나면 그 것처럼 보입니다.가로로 UINavigationController에서 UIDatePicker로드하기

문제가 발생했을 때 자동 회전을 지원하는 필자 자신의 날짜 선택기를 만들려고했는데, 두 개의 다른보기를 생성하고 바꿔 치기를 시도했으며,보기 프레임 크기를 ViewWillAppear 메서드입니다. 그들 중 누구도 아직 나를 위해 일하는 것 같지 않습니다.

누구나 네비게이션 컨트롤러에서 날짜 선택 도구를 가로로 올바르게 표시하는 방법에 대한 제안 사항이 있습니까? 나는 아마도 단순한 것을 간과 할 것이고 대답은 내 앞에있다. 그러나 나는 그것을 발견하지 못한다.

답변

0

글쎄요. 나는 오리엔테이션이 무엇인지 확인하고 날짜 선택 도구를 제거하고 코드에서 날짜 선택 도구를 다시 만들고 추가했습니다. 효과가 있었지만, 아름답지는 않지만 작동했습니다.

+1

뷰 컨트롤러가 펜촉에서로드 될 때 장치가 이미 가로 방향 인 경우 제대로 표시되지 않습니다. 그래서 컨트롤을 재현하기위한 수정은 의미가 있지만 더 나은 수정을 발견했습니다. 제 대답을 참조하십시오. – progrmr

0

날짜 선택 도구를 자동 회전 (보기에서 직접 컨트롤러의보기가 아니라)하도록 추가하십시오.

세트 self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin

13

저도 같은 문제로 실행했습니다. 가로 방향으로 이미 뷰를로드하면 UIPicker가 올바르게 렌더링되지 않습니다. this page from Llamagraphics에서 픽스를 찾을 때까지 몇 시간 동안 해결 방법을 찾으려고 노력했습니다. 당신은 선택 도구를 가지고 뷰 컨트롤러의 viewDidLoad에이 코드를 추가

for (UIView* subview in myPicker.subviews) { 
    subview.frame = myPicker.bounds; 
} 

방문 자세한 내용은 webpage. 스튜어트 고마워!

+0

위대한 작품! – morais

+0

고마워요! 이 문제를 해결하기 위해 수 시간을 보냈습니다! – Nathan

+0

훌륭하고 간단한 솔루션입니다. 고마워, 정말 고마워! – MystikSpiral

0

나를 위해 일한 것은 다음과 같습니다.

[[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationPortrait animated: NO]; 
datePicker = [[UIDatePicker alloc] initWithFrame: CGRectZero]; 
[[UIApplication sharedApplication] setStatusBarOrientation: curOrientation animated: NO]; 

그래서 기본적으로, 나는 날짜 선택기를 작성 방향을 변경하고 즉시에 그 전에 무엇인지 다시 방향을 변경 : 내가 DatePicker에서를 만들 때, 나는 그것이 세로 모드에서 생각합니다. 피커 너비 (화면 너비)와 높이 (216)를 다른 곳에 설정했습니다.

다른 페이지에서이 단서를 얻었습니다.

0

iPad에서 가로로 크기를 조정 한 날짜 선택 도구 (타이머 모드)를 표시 할 때도 동일한 문제가있었습니다. 나는이 버그에 대한 알려진 해결책을 얻을 수 없었기 때문에보기에 두 개의 datepickers를 넣는 추악한 해킹으로이를 수정했습니다. 하나는 백그라운드에서 크기가 조정되고 다른 하나는 표준 크기 (320px)입니다. 전경에서 ... 아프다.하지만 제대로 표시되고 그게 중요합니다. 어쨌든 애플의 잘못이야)

1

아래의 코드는 인물 모드와 풍경 모드에서 모두 작동합니다. 이 경우 다음과 같이 tableview 프레임 원점을 설정해야합니다. -

_dateTableViewCell=[self.tableView dequeueReusableCellWithIdentifier:@"DatePickerCell"]; 
if (self.dateTableViewCell==nil) 
{ 
    CGRect rect; 
    self.dateTableViewCell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"DatePickerCell"]; 
    UIDatePicker *datePicker=[[UIDatePicker alloc]initWithFrame:frame]; 
    datePicker.datePickerMode=UIDatePickerModeDateAndTime; 
    datePicker.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    CGRect cellRect = self.dateTableViewCell.frame; 
    cellRect.size.height = 216; 
    self.dateTableViewCell.frame = cellRect; 
    CGRect startRect = self.dateTableViewCell.frame; 
    startRect.origin.x = 0.0; 
    datePicker.frame = startRect; 
    [self.dateTableViewCell.contentView addSubview:datePicker]; 
} 
관련 문제