这可能听起来像是一个新手问题,但我是iOS开发新手,
我的iPad视图上有UIWebView和UITableView。
在shouldAutorotateToInterfaceOrientation
我调整了它们的大小,看起来很漂亮。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if( interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
CGRect f = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height / 2);
self.mTextView.frame = f;
f = CGRectMake(0, self.view.frame.size.height / 2, self.view.frame.size.width, self.view.frame.size.height / 2);
self.mTableView.frame = f;
}
if( interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
CGRect f = CGRectMake(0, 0, self.view.frame.size.width / 2, self.view.frame.size.height);
self.mTextView.frame = f;
f = CGRectMake(self.view.frame.size.width / 2, 0, self.view.frame.size.width / 2, self.view.frame.size.height);
self.mTableView.frame = f;
}
return YES;
}
现在的问题是: 对于第一次加载,表视图以正确的大小绘制,但是当我切换到纵向模式然后返回横向模式时,UITableView变得比帧指定的更宽。那么为什么会发生这种情况以及如何解决这个问题呢?
PS。我也尝试过为同一方法设置所有单元格的帧没有帮助。
PSS。这只发生在设备上,在模拟器上UITableView正确显示
答案 0 :(得分:4)
shouldAutorotateToInterfaceOrientation:
仅返回一个布尔值,指示视图控制器是否支持指定的方向,您不应在此方法中进行任何UI转换,而是在willAnimateRotationToInterfaceOrientation:duration:
中执行所有操作。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
if( interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
CGRect f = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height / 2);
self.mTextView.frame = f;
f = CGRectMake(0, self.view.frame.size.height / 2, self.view.frame.size.width, self.view.frame.size.height / 2);
self.mTableView.frame = f;
}
if( interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
CGRect f = CGRectMake(0, 0, self.view.frame.size.width / 2, self.view.frame.size.height);
self.mTextView.frame = f;
f = CGRectMake(self.view.frame.size.width / 2, 0, self.view.frame.size.width / 2, self.view.frame.size.height);
self.mTableView.frame = f;
}
}
Have a look at the documentation for UIViewController,很好地解释了。
答案 1 :(得分:2)
iOS只调用一次此功能!为了使您的工作顺利进行,您必须将此行添加到(void)viewDidLoad
函数中:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
使(void)orientationChanged:(id)object
功能:
- (void)orientationChanged:(id)object{
UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication] statusBarOrientation;
if(UIInterfaceOrientationIsPortrait(interfaceOrientation)){
// some works
}else if(UIInterfaceOrientationIsLandscape(interfaceOrientation)){
// another works
}
}
我希望它对你有用!
答案 2 :(得分:2)
您可以在纵向和横向模式下更改UITableView的大小。 UITableView以相对于先前方向模式的比率自动更改大小。因此,您可以为两种模式修复所需的大小。
希望这对你有用。
答案 3 :(得分:0)
请检查视图的autoResizing
属性。
答案 4 :(得分:0)
最简单的方法是您可以为纵向和横向模式创建2个不同的视图,因此无论何时模式更改,您都可以轻松更改视图。 像这样:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
self.view = self.portraitView;
else
self.view = self.landscapeView;
[tblScore reloadData];
return YES;
}
答案 5 :(得分:0)