如何更改目标C中的屏幕方向时日期选择器视图的奇怪行为?

问题描述 投票:0回答:2

我有这个项目,一旦用户使用datePicker选择日期,就需要更改应用程序的屏幕方向。一旦用户点击Date按钮,它将显示datePicker。在人像模式下,第一张图像是datePicker的正确布局。

正确的肖像布局Correct Portrait Layout

将屏幕方向从横向更改为纵向]时。它将出现问题。请参考下图。

datePicker位于下面

Wrong Landscape Layout

一旦变为横向,下面的图像应该是正确的布局。

Correct Landscape Layout

当您将屏幕方向更改回纵向时。 datePicker布局已更改。请参考下图。

不正确的肖像布局

Wrong Portrait Layout

下面是使用的代码:

- (void)resizeView:(UIInterfaceOrientation)interfaceOrientation
{
//LOG(@"interfaceOrientation=%ld", (long)interfaceOrientation);
//LOG(@"self.frame =%@", NSStringFromCGRect(self.frame));
//LOG(@"self.bounds=%@", NSStringFromCGRect(self.bounds));

CGFloat x, y, w, h;
viewBack.frame = self.bounds;

#define _HEIGHT_LABEL   (40)
#define _HEIGHT_PICKER  (162)


#define _HEIGHT_TOOLBAR (CGRectGetHeight(toolBar.frame))//(44)
if (interfaceOrientation == UIInterfaceOrientationPortrait)
{
    LOG(@"[Portrait]");
    w = CGRectGetWidth(viewBack.frame);
    h = _HEIGHT_LABEL + _HEIGHT_PICKER*2 + _HEIGHT_TOOLBAR;
    viewPicker.frame = CGRectMake(0, 0, w, h);
    viewPicker.center = viewBack.center;

    x = 0;
    y = 0;
    w = CGRectGetWidth(viewPicker.frame);
    h = _HEIGHT_LABEL;
    lblTitle.frame = CGRectMake(x, y, w, h);

    x = 0;
    y = CGRectGetMaxY(lblTitle.frame);
    w = CGRectGetWidth(viewPicker.frame);
    h = _HEIGHT_PICKER;
    datePicker.frame = CGRectMake(x, y, w, h);

    x = 0;
    y = CGRectGetMaxY(datePicker.frame);
    w = CGRectGetWidth(viewPicker.frame);
    h = CGRectGetHeight(datePicker.frame); //datePickerと同じ
    timePicker.frame = CGRectMake(x, y, w, h);

    x = 0;
    y = CGRectGetMaxY(timePicker.frame);
    w = CGRectGetWidth(viewPicker.frame);
    h = _HEIGHT_TOOLBAR;
    toolBar.frame = CGRectMake(x, y, w, h);
    //LOG(@"tool  =%@", NSStringFromCGRect(toolBar.frame));
}
    else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
    LOG(@"[Landscape]");
    w = CGRectGetWidth(viewBack.frame);
    h = _HEIGHT_LABEL + _HEIGHT_PICKER + _HEIGHT_TOOLBAR;
    viewPicker.frame = CGRectMake(0, 0, w, h);
    viewPicker.center = viewBack.center;

    x = 0;
    y = 0;
    w = CGRectGetWidth(viewPicker.frame);
    h = _HEIGHT_LABEL;
    lblTitle.frame = CGRectMake(x, y, w, h);

    w = CGRectGetWidth(viewPicker.frame) / 2; //画面幅の半分
    x = CGRectGetMidX(viewPicker.frame) - w;
    y = CGRectGetMaxY(lblTitle.frame);
    h = _HEIGHT_PICKER;
    datePicker.frame = CGRectMake(x, y, w, h);

    x = CGRectGetMidX(viewPicker.frame);
    y = CGRectGetMinY(datePicker.frame); //datePickerと同じ
    w = CGRectGetWidth(datePicker.frame); //datePickerと同じ
    h = CGRectGetHeight(datePicker.frame); //datePickerと同じ
    timePicker.frame = CGRectMake(x, y, w, h);

    x = 0;
    y = CGRectGetMaxY(datePicker.frame);
    w = CGRectGetWidth(viewPicker.frame);
    h = CGRectGetHeight(toolBar.frame);//44;
    toolBar.frame = CGRectMake(x, y, w, h);
}

 #if 0
LOG(@"back  =%@", NSStringFromCGRect(viewBack.frame));
LOG(@"base  =%@", NSStringFromCGRect(viewPicker.frame));
LOG(@"image =%@", NSStringFromCGRect(imageViewBlackGraBar.frame));
LOG(@"label =%@", NSStringFromCGRect(lblTitle.frame));
LOG(@"date  =%@", NSStringFromCGRect(datePicker.frame));
LOG(@"time  =%@", NSStringFromCGRect(timePicker.frame));
LOG(@"tool  =%@", NSStringFromCGRect(toolBar.frame));
LOG(@"");
 #endif
}

[请帮助我解决此问题。我正在将近一个星期的时间,似乎根本没有任何进展。预先谢谢你

我有这个项目,一旦用户将使用datePicker选择日期,就需要更改应用程序的屏幕方向。用户点击“日期”按钮后,将显示datePicker。...

ios objective-c datepicker constraints
2个回答
0
投票

尝试调用[[自视图] layoutIfNeeded];在resizeView


0
投票

您应该使用UITextField而不是UILabel并将日期选择器设置为textField的inputView

© www.soinside.com 2019 - 2024. All rights reserved.