使用 Storyboard 和 Autolayout 旋转到横向后,UIScrollView 中的 UIButtons 不可触摸?

Posted

技术标签:

【中文标题】使用 Storyboard 和 Autolayout 旋转到横向后,UIScrollView 中的 UIButtons 不可触摸?【英文标题】:UIButtons in UIScrollView is not touchable after rotate to landscape orientation using Storyboard and Autolayout? 【发布时间】:2014-04-29 22:39:59 【问题描述】:

我在ScrollViewSuperViewViewController视图中有很多“按钮”。

ViewController
   View
      ScrollView
         View
            Button
            Button
            Button
            Button
            Button
            ....

我使用autolayout,查看ScrollView(尾随,顶部,机器人,前导0,对齐x,y中心) ScrollViewViewController.View 相同。

当旋转到横向模式时,屏幕只识别x 0到320的触摸,x 320之后的任何按钮都不可触摸。

我确实更改了SuperViewScrollView 和内容视图的框架,但没有做任何事情

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

    if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) 
        _contentView.frame = CGRectMake(0, 0, 1000,1000);
        _mainView.frame = CGRectMake(0, 0, 1000,1000);
        _scrollView.frame = CGRectMake(0, 0, 1000,1000);

        NSLog(@"size of self is %@",NSStringFromCGSize(self.view.frame.size));
        NSLog(@"size of scrollview is %@",NSStringFromCGSize(_scrollView.frame.size));
        NSLog(@"size of contentView is %@",NSStringFromCGSize(_contentView.frame.size));
        NSLog(@"size of MainView is %@",NSStringFromCGSize(_mainView.frame.size));

     else 
    

有人知道为什么吗?

谢谢。

正如马特建议的那样,我在旋转后更改了框架 (didRotateFromInterfaceOrientation)。这是视图框架的日志和一个不可触摸的按钮

2014-04-29 18:08:27.528 [84526:60b] size of self is 0, 0, 568, 288
2014-04-29 18:08:27.529 [84526:60b] size of scroolview is 0, 0, 568, 336
2014-04-29 18:08:27.529 [84526:60b] size of content is 568, 466
2014-04-29 18:08:27.529 [84526:60b] size of contentView is 0, 0, 568, 466
2014-04-29 18:08:27.530 [84526:60b] size of MainView is 0, 0, 568, 288
2014-04-29 18:08:27.530 [84526:60b] size of myBtn is 364, 45, 50, 50

所以 myBtn 在 contentView 中但它不可触摸?

【问题讨论】:

在旋转后 登录那些尺寸,而不是之前,看看它说什么。并记录按钮的框架。我打赌按钮不再在他们的超级视图中。这是一个常见问题:在其父视图之外的子视图可见但不可点击。 谢谢马特,请看编辑 【参考方案1】:

旋转设备时是否收到任何约束警告?

我遇到了同样的问题,我可以看到一个选择器视图,但在我旋转设备时无法点击。返回之前的方向后再次工作。

在我的情况下,解决方案是删除所有约束(首先备份项目)并重置为建议的约束。

然后它起作用了。

希望对你有帮助。

作为有趣的信息:我会告诉你这开始发生了,在我将 XCode 从 4.X 更新到 5.0 之后,所以,故事板中的某些内容可能没有正确升级。

【讨论】:

我在启动时看到了一些自动布局错误。我修复了它们,它仍然有问题。我尝试重置为建议的约束,这些约束弄乱了我的 UI,但仍然没有解决问题。

以上是关于使用 Storyboard 和 Autolayout 旋转到横向后,UIScrollView 中的 UIButtons 不可触摸?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Storyboard 中的 UITableViewCell 时使用 alloc 和 init

使用 Storyboard 和 Monotouch 手动将更多选项卡添加到 UITabController

IOS多语言切换2-storyboard

在同一个项目中使用 xib 和 storyboard

iOS开发中xib和Storyboard中需要注意的事项

在 Nativescript iOS 应用上使用 XIB 和 Storyboard