在 iOS 中为 UIPageControl 添加约束时 UIScrollView 不滚动
Posted
技术标签:
【中文标题】在 iOS 中为 UIPageControl 添加约束时 UIScrollView 不滚动【英文标题】:UIScrollView not scrolling when add constrains for UIPageControl in iOS 【发布时间】:2014-10-09 17:53:27 【问题描述】:我有 1 个UIPageControl
和 1 个UIScrollView
。当我为UIPageControl
设置约束时,我的UIScrollView
无法滚动。这是我的代码:
//set contentsize for uiscrollview
[self.scrollView setContentSize:CGSizeMake(320, 1440)];
UIPageControl *imagePVControl = self.imagePVControl;
[imagePVControl setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[imagePVControl]-0-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(imagePVControl)]];
当我使用[imagePVControl setTranslatesAutoresizingMaskIntoConstraints:NO];
滚动视图无法滚动,但如果我使用[imagePVControl setTranslatesAutoresizingMaskIntoConstraints:YES];
,我的滚动视图可以滚动。你能帮我解决这个问题吗?谢谢。
另外,我的 XIB 取消选中“使用自动布局”” .
更新
我更改为我的代码如下。 UIScrollview
可以滚动,但UIPageControl
居中而不是左对齐。我想 algin 左边的UIPageControl
但它不成功。请帮我纠正它。谢谢
NSDictionary *views = @@"ScrollImageView":self.scrollViewImage,@"TableView":self.productDetailTable,@"InfoView":self.infoView;
NSDictionary *metrics = @ @"ScrollImageheight" : ScrollImage_height,@"Tablewidth" : width, @"Tableheight" : Table_height,@"infoViewheight" : InfoView_height,@"infoViewWidth" : InfoView_width;
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[TableView(Tablewidth)]-0-|" options:0 metrics:metrics views:views]];
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[InfoView(infoViewWidth)]-0-|" options:0 metrics:metrics views:views]];
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[ScrollImageView(ScrollImageheight)]-0-[InfoView(infoViewheight)]-0-[TableView(Tableheight)]-|" options:0 metrics:metrics views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[imagePVControl]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(imagePVControl)]];
【问题讨论】:
分享IB截图 其他约束呢? 【参考方案1】:我也在为 UIScrollView 中的约束而苦苦挣扎。我最近学到的是,一旦你将TranslatesAutoresizingMaskIntoConstraints
设置为NO,你会丢失很多设置。就像contentSize
和UIScrollView
中的视图框架一样,这很奇怪。
我学到的是,如果你想在 UIScrollView
内的视图中添加约束,你必须设置 whosViews 的所有内容。
就您而言,我认为您应该尝试这种方式:
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[imagePVControl(320)]-0-|", options:0, metrics:nil, views:NSDictionaryOfVariableBindings(imagePVControl)]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[imagePVControl(1440)]-0-|", options:0, metrics:nil, views:NSDictionaryOfVariableBindings(imagePVControl)]];
在这两个约束中,我指定了上、下、左、右,除此之外,我还设置了imagePVControl
的宽度和高度
这里的原因是,一旦你将TranslatesAutoresizingMaskIntoConstraints
设置为NO,你告诉计算机你将告诉它contentSize
有多大,而不是设置contentSize
,你告诉它所有的信息内容中的视图。这里的主要区别是UIScrollView
周围没有固定的边缘,所以你不能像其他类型的UIView
一样设置约束。
你可以从中学习:https://developer.apple.com/library/ios/technotes/tn2154/_index.html 希望对您有所帮助:)
查看这个问题后,我发现了问题。您对待UIPageControl
的方式是对的,您应该在此处添加更多代码。
我假设您在滚动视图的顶部有一个名为 myView 的 UIView
,然后在 myView 下方有一个名为 myTable 的 UITableView
。并且您想设置 myView 240 高度和 myTable 1200 高度。然后是代码:
NSDictionary *viewsDic = NSDictionaryOfVariableBindings(myView, myTable);
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[myView(320)]-|", options:0, metrics:nil, views:viewDic]];
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[myTable(320)]-|", options:0, metrics:nil, views:viewDic]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[myView(240)]-[myTable(1200)]-|", options:0, metrics:nil, views:viewDic]];
主要原因是你将scrollViewTranslatesAutoresizingMaskIntoConstraints
的子视图设置为NO,这样会导致无法手动设置contentSize。所以我给出了scrollView的内容有多大,它会自动计算contentSize。
【讨论】:
谢谢,我试过你的代码,滚动视图可以滚动但内容大小不正确,UIPageControl 没有显示。 那么该滚动视图中的所有视图是什么?你不只有一个 UIPageControl,对吧? 是的,我在滚动视图中有 uitableview、uipagecontroler 和 uiview。 那么我认为你应该用这三个视图来实现你的滚动视图。 contentSize 由这些视图决定,一旦将 TranslateAutoresizengMaskIntoConstraints 设置为 NO,就无法将 contentSize 设置为所需的大小。 你能举例代码吗?我是iOS的新手。谢谢【参考方案2】:为什么要使用约束?为什么你不能在 UIScrollView
上 setPagingEnabled:YES
然后在层次结构中将 UIPageControl
放在 UIScrollView
的顶部?
【讨论】:
因为我想为 UIPageControl 左对齐。但是当我为其设置约束时,我的滚动视图无法滚动。以上是关于在 iOS 中为 UIPageControl 添加约束时 UIScrollView 不滚动的主要内容,如果未能解决你的问题,请参考以下文章
为啥需要在 pageControl 中为 iOS 13 和 iOS 14 设置不同的常量