我有一个滚动视图,里面有一个内容视图。
滚动视图对顶部,底部,前导和尾随内容视图以及顶部,前导,试验超视图以及底部空间到底部布局具有约束。
我在轮换时更改了内容视图宽度:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
_contentWidth.constant = 480;
}else{
//iPhone Portrait
_contentWidth.constant = 320;
}
}
当我运行应用程序并旋转到横向时,内容视图的宽度会发生变化,一切看起来都很好,但滚动视图只允许在屏幕的左半部分滚动(整个视图滚动但你的手指必须打开屏幕左侧滚动)。滚动视图框架=(0 0; 320 431);.
如果我转到标签栏上的另一个标签并返回此视图框架=(0 0; 480 320);应该是什么,一切正常/看起来很好。
通过不选择另一个标签然后回来,我需要做些什么才能实现这个目标?
修改 的
我创建了一个名为ContentViewSubclass的Content View子类,并在其中添加了以下方法:
-(CGSize)intrinsicContentSize{
CGSize size;
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
size.height = 1000;
size.width = 480;
return size;
}else{
//iPhone Portrait
size.height = 1000;
size.width = 320;
return size;
}
}
然后在我的ViewController.m上,我更新了以下代码:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
[_contentView invalidateIntrinsicContentSize];
[_contentView intrinsicContentSize];
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{ _contentWidth.constant = 480;
_contentHeight.constant = 1000;
}else{
//iPhone Portrait
_contentWidth.constant = 320;
_contentHeight.constant = 1000;
}
}
当我记录尺寸时,我得到了
风景: ContentViewSubclass框架为(0 0,480 1000) UIScrollView框架是(0 20,480 251) contentView内在大小为{480,1000}
人像: ContentViewSubclass框架是(0 0; 320 1000) UIScrollView框架是(0 20,320 411) contentView内在大小为{320,1000}
所有东西都在标签栏视图控制器中,这里的设置如下:
我删除了表格视图和集合视图,以防它们导致问题但没有帮助。
同样的问题。我在所有内容上都得到了正确的布局,而且所有卷轴都是滚动的,但是你已经触摸了横向屏幕的左半部分来滚动它。如果我转到另一个标签视图并返回到此视图,它可以正常工作。滚动视图然后显示UIScrollView框架是(0 20,480 300)。
答案 0 :(得分:1)
您正在使用" Pure AutoLayout Approach" Apple在技术说明中对此进行了描述:https://developer.apple.com/library/ios/technotes/tn2154/_index.html
" Pure AutoLayout Approach"适用于Apple的示例代码,因为图像视图具有内在的内容大小;另一方面,您的内容视图却没有。
如果您不想切换到"混合方法",那么您的内容视图必须具有内在的内容大小。您可以通过创建UIView子类并覆盖intrinsicContentSize方法来实现。在willRotateToInterface ...方法中,将invalidateIntrinsicContentSize发送到您的内容视图。
答案 1 :(得分:0)
我在类似的情况下挣扎。在我的情况下,横向屏幕宽度的最右边部分在旋转到横向时被“添加”到纵向屏幕宽度(即,对于x的所有值,其中:w-h< x< = w)。那些被限制进入那个区域的按钮等都没有响应。如果这听起来与您所看到的相同,那么this simple solution可能有所帮助。它为我修好了。