5

我有一个 1 的故事板,其中 1UIViewController包含UIView许多嵌套UIView的 s。我将视图控制器子类化以实现此方法:

- (BOOL)shouldAutorotateToInterfaceOrientation: UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

我还添加了

<key>UISupportedInterfaceOrientations</key>
    <array>
     <string>UIInterfaceOrientationLandscapeLeft</string>
     <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeLeft</string>

Info.plist.

在主 UIView 的 viewDidLoad 中,我正在这样做:

PASectionView* sectionView = [[PASectionView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 180)];
[self addSubview:sectionView];

问题是控件只有 756px 宽,而不是预期的 1024。有关详细信息,请参阅下面的屏幕截图。在此处输入图像描述我一直在网上搜索,但在任何地方都找不到解决这个令人沮丧的问题的方法。我正在使用 Xcode 4.5 并将 iOS5.1 设置为基本 SDK。

编辑 它通过用边界替换框架来工作。但是我不明白发生了什么,所以它不适用于帧大小。

4

4 回答 4

11

框架矩形,描述视图在其父视图坐标系中的位置和大小。

@property(nonatomic) CGRect 框架

边界矩形,描述视图在其自己的坐标系中的位置和大小。

@property(nonatomic) CGRect 边界

使用边界,而不是框架。

于 2012-07-09T12:37:30.337 回答
2

将 设置为autoresizingMask您想要在旋转时自动调整大小的任何视图。像这样:

[myView setAutoresizingMask:UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleRightMargin];
于 2012-07-09T12:36:45.303 回答
0

问题是因为在加载到横向模式之前,您的代码行正在调用方法加载,[PASectionView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 180)]; [self addSubview:sectionView];如果它是视图控制器类,那么您应该在哪个方法中调用它,那么它应该是[PASectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 180)]; [self addSubview:sectionView];,如果它是子类,UIView那么您从哪里获得该ViewDidLoad方法。现在在.h课堂上解决你的问题:写这个 PASectionView* sectionView; 在.m类中实现此方法

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    if (toInterfaceOrientation == UIInterfaceOrientationPortrait)
{

}
else  // OrientationLandscape
{
sectionView.frame = CGRect(sectionView.frame.origin.x,sectionView.frame.origin.y,self.view.frame.size.width,180);    
}
于 2012-07-09T12:37:00.340 回答
0

您必须为您的子视图设置自动调整大小掩码,

如果你的 subView 是通过代码添加的,那么在添加 subView 到 superview 之前添加这行代码。yourSubView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

否则,如果您的 subView 添加到 nib 文件中,请在 nib 文件的 subView 的属性中选择边框磁铁和调整掩码大小。

于 2012-07-09T12:39:31.037 回答