1

我有一个 iPad 应用程序,我想以横向而不是纵向工作。我以编程方式将图像、标签和按钮放置到我的视图中,并使用 CGRectMake (x,x,x,x) 告诉他们在视图中进入中心的位置。当应用水平旋转时,我需要我的标签和按钮向上移动(因为在横向模式下它们不能向下移动),但要保持在中间。这是我一直在玩的一些代码:

if((self.interfaceOrientation == UIDeviceOrientationLandscapeLeft) || (self.interfaceOrientation == UIDeviceOrientationLandscapeRight)) 
{
    lblDate = [[UILabel  alloc] initWithFrame:CGRectMake(384-(fieldWidth/2)-30,controlTop+45,120,40)]; //these dimensions aren't correct, though they don't matter here

    lblDate.text = @"Date:";
    lblDate.backgroundColor = [UIColor clearColor];
    [contentView addSubview:lblDate];
} else {
    //the orientation must be portrait or portrait upside down, so put duplicate the above code and change the pixel dimensions
}

谢谢你的帮助!

4

2 回答 2

0

看看这个:iphone/ipad 方向处理

您只需根据旋转指定每个控制位置。

于 2011-07-08T13:51:05.827 回答
0

我知道现在看来这可能是一个老问题,但我最近也遇到了同样的问题。您可能会偶然发现许多建议,例如转换主视图的子视图或其图层。这些都不适合我。

实际上,我发现的唯一解决方案是,由于您希望动态定位 UI 控件,因此不要主要在界面构建器中部署它们。界面构建器有助于了解纵向和横向动态控件的所需位置。即在界面生成器中创建两个单独的测试视图,一个纵向和另一个横向,根据需要对齐控件,并向下对齐 X、Y、宽度和高度数据,以便与每个控件的 CGRectMake 一起使用。

一旦您从界面构建器中写下所有需要的定位数据,就可以摆脱那些已经绘制的控件和出口/动作链接。他们现在不需要了。

当然不要忘记实现 UIViewController 的 willRotateToInterfaceOrientation 来设置控件的框架与每个方向的变化。

@interface

//Declare your UI control as a property of class.
@property (strong, nonatomic) UITableView *myTable;

@end

@implementation

// Synthesise it
@synthesize myTable

- (void)viewDidLoad
{
    [super viewDidLoad];

// Check to init for current orientation, don't use [UIDevice currentDevice].orientation
  if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {
        myTable = [[UITableView alloc] initWithFrame:CGRectMake(20, 20, 228, 312)];
    }
    else if (self.interfaceOrientation == UIInterfaceOrientationPortrait)
    {
        myTable = [[UITableView alloc] initWithFrame:CGRectMake(78, 801, 307, 183)];
    }
}

    myTable.delegate = self;
    myTable.dataSource = self;

    [self.view addSubview:myTable];
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
    {
        // Show landscape
        myTable.frame = CGRectMake(20, 20, 228, 312);

    }
    else
    {
        // Show portrait
        myTable.frame = CGRectMake(78, 801, 307, 183);
    }
}
于 2014-04-08T08:38:39.050 回答