我无数次遇到过这个问题,无法弄清楚如何修复它。我在Xcode项目中工作(空项目 - 没有XIB!)。我的方向设置为横向:
但这种情况一直在发生:
该观点正在被截止。无论我做什么,它似乎都没有设置到合适的尺寸。出于某种原因,它使用纵向边界在横向中显示视图。有谁知道如何解决这一问题?我还想将方向限制为仅限景观。
更新 如果我将1024硬编码为宽度并将768硬编码为高度,则视图不会被截止。这显然是一个可怕的解决方案,但我无法弄清楚。有没有人知道解决方案?
答案 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];
}