Ios UIScrollViews子视图在纵向到横向方向更改时不调整自身大小

Ios UIScrollViews子视图在纵向到横向方向更改时不调整自身大小,ios,uiscrollview,autolayout,landscape,Ios,Uiscrollview,Autolayout,Landscape,在我的应用程序中,我有一个层次结构,如主视图->UIScrollView->UISearchBar。搜索栏覆盖整个屏幕宽度。但当它切换到横向时,scrollview会根据横向进行自我调整,覆盖整个屏幕,但其子视图(如UISearchBar width)仍与纵向视图相同。另外,我正在使用Autolayout,并且我已经在情节提要中正确设置了它们的约束(前导和尾随、宽度(大于等于320)等) 另外,我知道在SO中有几个答案,但几乎每个人都在Willatrorate中再次提到设置宽度。但我在UIScr

在我的应用程序中,我有一个层次结构,如主视图->UIScrollView->UISearchBar。搜索栏覆盖整个屏幕宽度。但当它切换到横向时,scrollview会根据横向进行自我调整,覆盖整个屏幕,但其子视图(如UISearchBar width)仍与纵向视图相同。另外,我正在使用Autolayout,并且我已经在情节提要中正确设置了它们的约束(前导和尾随、宽度(大于等于320)等)


另外,我知道在SO中有几个答案,但几乎每个人都在Willatrorate中再次提到设置宽度。但我在UIScrollview中有大约15个子视图,我认为无法通过编程方式设置(如增加LOC),而且我认为Autolayout必须有一些解决方案。

您可以使用子视图的UIViewAutoresizing mask(autoresizingMask属性)。

您可以使用UIViewAutoresizing mask(autoresizingMask属性)您的子视图。

试试这个: 此问题将仅通过约束来解决。我创建了一个项目,通过使用正确的约束,它对我来说运行良好

这里我将向您展示如何逐个添加正确的约束:

  • 添加scrollview并仅为scrollview添加约束,如屏幕截图中所示:
  • 试试这个: 此问题将仅通过约束来解决。我创建了一个项目,通过使用正确的约束,它对我来说运行良好

    这里我将向您展示如何逐个添加正确的约束:

  • 添加scrollview并仅为scrollview添加约束,如屏幕截图中所示:

  • 滚动视图无法很好地处理约束。下面是一种使用约束和界面生成器的方法,它为我提供了一个垂直滚动的滚动视图,该视图不需要任何手动或内容大小欺骗,并且可以旋转:

    • 使用约束定位的视图控制器中的滚动视图
    • 一种容器(UIView),它是scrollview的一个子视图,定位时带有将每条边固定到superview的约束
    • 将所有附加子视图添加到容器视图。使用约束。超过scrollview的高度以获得垂直滚动的scrollview
    但是,有一个技巧可以自动调整旋转大小:

    • 您必须向容器视图添加一个附加约束,使其宽度与UIScrollview的宽度相匹配。奇怪的是,您必须这样做,因为将每一侧固定到scrollview应该可以做到这一点,但是如果您不添加额外的约束,它将不适用于旋转
    我的意思是:


    滚动视图无法很好地处理约束。下面是一种使用约束和界面生成器的方法,它为我提供了一个垂直滚动的滚动视图,该视图不需要任何手动或内容大小欺骗,并且可以旋转:

    • 使用约束定位的视图控制器中的滚动视图
    • 一种容器(UIView),它是scrollview的一个子视图,定位时带有将每条边固定到superview的约束
    • 将所有附加子视图添加到容器视图。使用约束。超过scrollview的高度以获得垂直滚动的scrollview
    但是,有一个技巧可以自动调整旋转大小:

    • 您必须向容器视图添加一个附加约束,使其宽度与UIScrollview的宽度相匹配。奇怪的是,您必须这样做,因为将每一侧固定到scrollview应该可以做到这一点,但是如果您不添加额外的约束,它将不适用于旋转
    我的意思是:


    我会解释的,但我认为这家伙比我做得更好。但另一方面,如果你想设置子视图的约束,你可以在子视图上运行for-in循环。我会解释的,但我认为这家伙比我做得更好。但另一方面,如果要设置子视图的约束,可以在子视图上运行for-in循环。是否尝试将autoresizingMask=UIViewAutoresizingFlexibleWidth设置为,即搜索栏?是否尝试将autoresizingMask=UIViewAutoresizingFlexibleWidth设置为,即搜索栏?它正在工作。我忘了输入水平中心对齐。谢天谢地,他在工作。我忘了输入水平中心对齐。感谢同样的方法也可以用于水平滚动滚动视图。只需为高度而不是宽度添加额外的约束,然后添加子视图以超过水平滚动的宽度。同样的方法也可用于水平滚动滚动视图。只需为高度(而不是宽度)添加额外的约束,然后添加子视图以超过水平滚动的宽度。
    2. now add search bar and add constraints for search bar too, 
    here below you can find out complete constraints for scrollview and search together: