2011-09-19 59 views
1

如何修复UIButton/UILabel等不同方向的某些位置?谢谢!!! 当我为不同的方向设置不同的框架奇怪的事情发生?有没有解决方案?如何修复UIButton/UILabel等不同方向的某些位置?

+0

发生了什么奇怪的事情?你有这样的照片?您可以查询当前的设备方向,然后根据它将您的项目放在父视图中。 –

回答

0

只有当您的视图非常复杂时才需要制作两个视图,例如iPhone计算器,它在旋转时会完全更改。例如,如果您只想重新居中按钮或在转角处放置一个开关,您就会想要使用自动调整系统。这个系统有时被称为“支柱和弹簧”。在Techotopia有一个很好的,简单的介绍。

0

是的!你需要layoutSubviews。只要方向改变,或者在视图出现之前就会调用它。

使用此方法根据视图的边界来布局子视图。例如:

- (void)layoutSubviews { 
CGRect bounds = self.bounds; 

do your layout stuff here 

}

布局是一个相当复杂的问题,你会发现吨的例子,教程在那里。我通常亲自处理它的方式是考虑每个元素如何让它定位于不同的方向。宽度或高度是否需要更改?是否应该相对于屏幕的顶部或左侧进行修正?另一个组件是相对于某个组件移动还是被修复?

1

创建2个视图会更好。一个用于肖像,另一个用于景观。

然后你可以相应的格式设置所有的数据。

然后根据设备方向进行视图替换。

if((interfaceOrientation == UIInterfaceOrientationPortrait) || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)) 

{ 
    [myLandscapeView removeFromSuperview]; 
    [myPortraitView setFrame:CGRectMake(0, 0, 320, 480)]; 

    [self.view addSubview:myPortraitView]; 
    [self.view bringSubviewToFront:myPortraitView];   
} 

if((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight)) 
{ 
    [myPortraitView removeFromSuperview]; 
    [myLandscapeView setFrame:CGRectMake(0, 0, 480, 320)]; 

    [self.view addSubview:myLandscapeView]; 
    [self.view bringSubviewToFront:myLandscapeView];   
} 

我希望它对你有帮助。

干杯。