Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITabBarController中古怪的界面错误UIScrollView。可被他人复制?_Ios_Objective C_Uiscrollview_Uisegmentedcontrol - Fatal编程技术网

Ios UITabBarController中古怪的界面错误UIScrollView。可被他人复制?

Ios UITabBarController中古怪的界面错误UIScrollView。可被他人复制?,ios,objective-c,uiscrollview,uisegmentedcontrol,Ios,Objective C,Uiscrollview,Uisegmentedcontrol,我的UIScrollView出现了一个奇怪的界面错误,我不知道如何解决它我只写了一行代码(如下所示),这是一个空白项目的设置,易于复制 设置: 我有一个UIScrollView,其中包含一个UISegmentedControl(因为 控件是动态加载的,它可能超过屏幕的宽度,scrollView应该水平滚动segmentedControl,scrollView的高度与UISegmentedControl相同)。 包含该错误的ViewController嵌入在选项卡栏(或导航栏,也显示该错误)中。整

我的UIScrollView出现了一个奇怪的界面错误,我不知道如何解决它我只写了一行代码(如下所示),这是一个空白项目的设置,易于复制

设置:

我有一个
UIScrollView
,其中包含一个
UISegmentedControl
(因为 控件是动态加载的,它可能超过屏幕的宽度,scrollView应该水平滚动segmentedControl,scrollView的高度与UISegmentedControl相同)。 包含该错误的ViewController嵌入在选项卡栏(或导航栏,也显示该错误)中。整个过程就是使用自动布局

错误:

当我将SegmentedControl向右滚动一定程度,然后通过单击tabBarController上的另一个选项卡来切换viewController时,当切换回初始viewController时,分段控件的内容偏移会发生奇怪的移动。当我尝试滚动到scrollview的最左边时,它不允许我。当切换选项卡几次时,它会再次得到修复,我可以重新进行

我所做的(你能复制这个吗?):

  • 创建一个空白的单视图ios项目
  • 将已给定的viewController嵌入tabbarcontroller中
  • 在视图的上半部分放置一个从左到右适合屏幕的滚动视图
  • 将UISegmentedControl放置在scrollview的左上角,并拖动scrollview以适应分段控件的高度
  • 稍微更改分段控件的宽度,以便xcode添加宽度约束。在分段控件的宽度约束中,将宽度约束的关系更改为“大于或等于”
  • 创建分段控件的出口
  • 在viewDidload中添加此代码

    [self.segmentedControl insertSegmentWithTitle:@"A really long title so it you have to scroll to see it" atIndex: 0 animated: NO];
    
  • 创建一个空白的viewcontroller,并将其添加为tabbarController的第二个viewcontroller

  • 这就是我的故事板的样子:

    现在运行项目,将分段控件滚动到其右端,直到滚动不动为止。切换选项卡并切换回,请告诉我您的scrollview现在的行为-以及原因

    我猜可能和自动布局有关吧?但我不知道会发生什么

    我试图通过在ViewDidDisplay中设置scrollView的contentSize,或在ViewDidDisplay中更改scrollView的内容偏移量,或更改帧,以及它们的组合来解决这个问题

    额外问题:


    是否不再需要设置scrollViews contentSize属性?为什么它会自动滚动内容?

    谷歌搜索之后,我在另一个问题中找到了答案

    您需要做的是保存
    滚动视图。
    视图上的contentOffset
    将消失
    , 在
    viewdiddemouse
    上将其设置为
    CGPointZero
    ,并在
    viewDidLayoutSubviews
    上将其设置回保存状态:

    -(void) viewWillDisappear: (BOOL) animated { 
     self.lastContentOffset = self.scrollView.contentOffset;
    [super viewWillDisappear: animated];
    }
    
    -(void) viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear: animated];
    self.scrollView.contentOffset = CGPointZero;
    }
    - (void)viewDidLayoutSubviews {
    [super viewDidlayoutSubviews];
    self.scrollView.contentOffset = self.lastContentOffset;
    }
    

    如果有人尝试了它,并得到相同的错误,请留下评论,让我知道我不是疯子-即使你没有修复。你不是疯子。我也有同样的行为,但我不知道它为什么这样做。