我有一个包含1 UIViewController
的故事板,其中包含1个UIView
,其中包含许多嵌套的UIView
。我将View Controller子类化为实现此方法:
- (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];
问题是控件只有756像素宽而不是预期的1024元。有关详细信息,请参阅下面的屏幕截图。 我一直在网上搜索,但无法在任何地方找到这个令人沮丧的问题的解决方案。我使用Xcode 4.5和iOS5.1设置为基本SDK。
修改 它通过用边界替换框架来工作。但是,我不了解发生了什么,所以它不适用于帧大小。
答案 0 :(得分:11)
框架矩形,用于描述视图的位置和大小 超级视图的坐标系。
@property(非原子)CGRect框架
和
边界矩形,用于描述视图的位置和大小 它自己的坐标系。
@property(非原子)CGRect界限
使用边界,而不是框架。
答案 1 :(得分:2)
将autoresizingMask
设置为要在旋转时自动调整大小的任何视图。像这样:
[myView setAutoresizingMask:UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleRightMargin];
答案 2 :(得分: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);
}
答案 3 :(得分:0)
您必须为子视图设置自动调整大小屏幕
如果通过代码添加了subView,则在将subView添加到superview之前添加此行代码。 yourSubView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
否则,如果在nib文件中添加了子视图,请在nib文件中选择子视图磁体并调整子视图属性中的大小。