被切断的视图(横向与纵向)

时间:2013-05-27 01:23:17

标签: ios uiview uiviewcontroller landscape portrait

我无数次遇到过这个问题,无法弄清楚如何修复它。我在Xcode项目中工作(空项目 - 没有XIB!)。我的方向设置为横向:

enter image description here

但这种情况一直在发生:

enter image description here

该观点正在被截止。无论我做什么,它似乎都没有设置到合适的尺寸。出于某种原因,它使用纵向边界在横向中显示视图。有谁知道如何解决这一问题?我还想将方向限制为仅限景观。

更新 如果我将1024硬编码为宽度并将768硬编码为高度,则视图不会被截止。这显然是一个可怕的解决方案,但我无法弄清楚。有没有人知道解决方案?

2 个答案:

答案 0 :(得分:1)

检查您在app delegate类中的application:didFinishLaunchingWithOptions:中设置的rooViewController。确保在此视图控制器类中返回正确的允许方向,其对象的设置为rootViewController:

- (NSUInteger) supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscape|UIInterfaceOrientationLandscapeRight;
}

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}

在您的app delegate中添加此功能:

- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 

 return UIInterfaceOrientationMaskLandscape|UIInterfaceOrientationLandscapeRight; 
 }

答案 1 :(得分:0)

我有答案!我的一位朋友帮我解决了这个问题。

视图在出现之前不会被定向,因此,如果您要向视图添加任何组件并期望它们遵循默认的方向(我怀疑是纵向),则必须在-(void)viewDidAppear:(BOOL)animated。我正在调用从viewDidLoad方法中向视图添加多个组件的方法,但是,当调用该方法时,视图尚未出现,方向未设置。将我的初始化代码移动到viewDidAppear方法可以解决我的问题。

以下是一个例子:

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidLoad];

    //Probably dont want to draw stuff in here, but if you did, it would adhere to the
    //correct orientation!
    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.backgroundColor = [UIColor blueColor].CGColor;
    layer.anchorPoint = CGPointMake(0, 0);
    layer.bounds = CGRectMake(0, 0, self.view.bounds.size.width, 300);
    [self.view.layer addSublayer:layer];

    //Call methods from here
    [self initializeScrollView];
    [self addItemToScrollView];
    [self addGraphToView];
}