我有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取消选中"使用Autolayout""
更新
我改为我的代码,如下所示。 UIScrollview
可以滚动,但UIPageControl
在中心而不是左边对齐。我想要左边的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)]];
答案 0 :(得分:0)
我也在努力克服UIScrollView中的约束。我最近学到的是,一旦你将TranslatesAutoresizingMaskIntoConstraints
设置为NO,你将失去很多设置。就像contentSize
和UIScrollView
内的观点框架一样,这很奇怪。
我学到的是,如果要为UIScrollView
内的视图添加约束,则必须设置其视图的所有内容。
在你的情况下,我认为你应该这样尝试:
[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]];
主要原因是您将scrollView TranslatesAutoresizingMaskIntoConstraints
的子视图设置为NO,这将使得无法手动设置contentSize。所以我给出了scrollView的内容有多大,它会自动计算contentSize。
答案 1 :(得分:0)
为什么要使用约束?为什么你不能在setPagingEnabled:YES
上UIScrollView
然后将UIPageControl
置于层次结构中的UIScrollView
之上?