在iOS中为UIPageControl添加约束时,UIScrollView不会滚动

时间:2014-10-09 17:53:27

标签: ios objective-c iphone uiscrollview uipagecontrol

我有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)]];

2 个答案:

答案 0 :(得分:0)

我也在努力克服UIScrollView中的约束。我最近学到的是,一旦你将TranslatesAutoresizingMaskIntoConstraints设置为NO,你将失去很多设置。就像contentSizeUIScrollView内的观点框架一样,这很奇怪。 我学到的是,如果要为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:YESUIScrollView然后将UIPageControl置于层次结构中的UIScrollView之上?