在我的应用程序中,我尝试创建一个界面构建器支持ipad和iPhone中的横向和纵向。
[在Android中,我们使用fill parent来自动调整动态创建的UI-Elements.is iOS中的任何语法都可以自动调整]
如何动态创建UI元素,支持横向模式和纵向模式?
如何创建视图控制器以支持横向模式和纵向模式?
是否需要动态创建所有视图和UI元素?
答案 0 :(得分:2)
1)如果您将制作xib或nib而不是仅在一种模式下将xib或nib显示为纵向或横向。对于任何控件,请使用“自动调整”选项,如下图所示。
http://www.raywenderlich.com/50319/beginning-auto-layout-tutorial-in-ios-7-part-2。您可以使用此链接进行自动布局。
但是自动布局无法正常工作。因此,即使使用自动布局,也需要以编程方式设置控制框架。
2)如果你想动态开发而不是使用下面的代码,你可以设置所有控件的框架。 在 ViewwillAppear 。
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(orientationChanged) name:UIDeviceOrientationDidChangeNotification object:nil];
viewdidload 中的将控件设置如下。
UILabel lbl - [UILabel alloc]init];
-(void)orientationChanged{
if(Orientation is portrait){
[lbl setFrame:for portrait];
}else{
[lbl setFrame: for landscape];
}
如果设备更改模式比上述通知触发并且在该方法中。你可以设置控制框架。
我希望你能得到答案。
答案 1 :(得分:0)
您可以使用自动布局提供纵向和横向模式。
有关详情,请查看:What is Auto Layout?。
您必须设置横向和纵向模式的约束才能工作。就像你想要一个顶部的按钮一样,你可以设置它的约束:从顶部和左边等等。
如果您希望UI元素动态更改,您只需根据您的要求更改方向框架。示例代码在这里:
# pragma mark - Orientation related methods
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration NS_AVAILABLE_IOS(3_0)
{
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
[self deviceRotatedToLandscapeMode];
}
else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
[self deviceRotatedToLandscapeMode];
}
else if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {
[self deviceRotatedToPortraitMode];
}
else if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
[self deviceRotatedToPortraitMode];
}
}
- (void) deviceRotatedToPortraitMode {
self.mTableView.frame = CGRectMake(0.0, 0.0, self.view.frame.size.width, self.view.frame.size.height);
}
- (void) deviceRotatedToLandscapeMode {
self.mTableView.frame = CGRectMake(0.0, 0.0, self.view.frame.size.height, self.view.frame.size.height);
}
答案 2 :(得分:0)
最可靠的方法 - 在视图控制器中创建方法 -
-(void)setFrameForOrientationChange:(UIDeviceOrientation*) o {
//...
implement your code for frame settings..
}