在我的
-(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
方法,我有代码在app随设备一起旋转时重新定位和调整scrollview的大小。我使用以下代码执行此操作:
-(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:0.5f];
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight){
//landscape
[mT.buttonScroll setFrame:CGRectMake(0, 544, 1024, 160)];
}else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){
//landscape
[mT.buttonScroll setFrame:CGRectMake(0, 544, 1024, 160)];
}else if (toInterfaceOrientation == UIInterfaceOrientationPortrait){
//portrait
[mT.buttonScroll setFrame:CGRectMake(0, 800, 768, 160)];
}else if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
//portrait
[mT.buttonScroll setFrame:CGRectMake(0, 800, 768, 160)];
}
}
一切都正常旋转,但是一旦我再次旋转滚动视图就完全无法触及。无法滚动或触摸其中的任何按钮。然后,如果我旋转回上一个视图,触摸会返回,依此类推。有谁知道它为什么会这样做?
答案 0 :(得分:4)
更改Frame
一切都很好,但是当UIScrollViews
contentSize
时,contentSize
会产生重大影响。更改方向时需要设置[mT.buttonScroll setContentSize:CGSizeMake(width, height)];
。您可以通过在更改方向时添加类似的内容来完成此操作。
mT.buttonScroll
我认为UIScrollView
是某种{{1}}。
这里发生的是您将内容区域的大小重置为您想要的大小。你可以在这里修改宽度和高度。
希望这有帮助,如果不给我们发表评论,我会尝试帮助。
答案 1 :(得分:0)
我认为您应该使用 shouldAutorotateToInterfaceOrientation 并观察您的轮播和用户界面响应。
在我的测试中,它与我提到的方法一起工作正常。 willRotatetoInterfaceOrientation 在其“应该”对应后被调用。否则,它根本不会被调用。
答案 2 :(得分:0)
除了大力水手的回答(这是正确的;)我发现我需要在这样的地方设置内容大小以避免这个问题。
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100)];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100) ];
}
-(void)viewDidLoad
{
[super viewDidLoad];
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100) ];
}
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)
{
NSLog(@"Lanscapse");
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100];
}
if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown )
{
NSLog(@"Portrait");
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100) ];
}
}
答案 3 :(得分:0)
我也面临同样的问题 请遵循以下步骤: 1.给scrollview提供顶部,底部,前导和底部约束 2.在scrollview中的包装器视图给出顶部,底部,前导和底部以及与父视图相等的宽度。 3. 非常重要的一步:将所有内部UI元素链接到前导,尾随,顶部,底部和高度。特别为最后的元素记得添加底部以及高度和尾随
答案 4 :(得分:-1)
查看滚动视图的框架。旋转后,scrollview的框架正在穿过窗口框架,因此scrollview没有响应触摸。
另外我假设在计算rect时你正在考虑其他视图rect如果存在像导航栏,tabbar,状态栏