我有一个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
}
感谢您的帮助!
答案 0 :(得分:0)
看看这个:iphone/ipad orientation handling
您只需根据旋转指定每个控制位置。
答案 1 :(得分:0)
我知道这可能是一个旧问题,现在正在考虑约会,但我最近才遇到同样的问题。您可能偶然发现许多建议,例如转换主视图的子视图或它的图层。这不适用于我。
实际上,我发现的单独解决方案是,由于您希望动态定位UI控件,因此不要将它们主要部署在界面构建器中。界面构建器可以帮助您了解纵向和横向方向上动态控件的所需位置。即在界面构建器中创建两个单独的测试视图,一个纵向和另一个横向,根据需要对齐控件,然后向下对齐X,Y,Width和Height数据,以便与每个控件的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);
}
}