UIPageControl不遵守UIScrollView中的约束

时间:2014-01-21 13:16:52

标签: ios ios7 uiscrollview interface-builder xcode5

我有一个UIScrollView,滚动视图中有很多视图。我正在使用自动布局,我的所有视图都以相同的方式布局:左侧和顶部间距设置为超视图,宽度和高度。一切都滚动得很好,但我的页面控制保持不变。它不会滚动滚动视图中的其他元素。是的,我 检查滚动视图中的页面控件,就像其他元素一样,是的,我已经四倍检查了页面控件的约束。它只是不会滚动。可能是什么问题呢?有标签,另一个滚动视图,文本视图,图像视图,它们都完美滚动,这只是页面视图有问题。是否有Xcode / iOS SDK的错误,或者我错过了什么?

UPDATE:我的滚动视图中的所有视图都在容器视图中。滚动视图和容器视图的translatesAutoresizingMaskIntoConstraints属性都设置为NO。它只是页面控件不遵守它的约束。以下是Interface Builder的截图:

enter image description here

3 个答案:

答案 0 :(得分:1)

我得到了它的工作:

1)将所有视图/控件放在containerView中并将其声明为属性。

2)添加此代码:

-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    self.scrollView.contentSize = self.containerView.bounds.size;
}

- (void)viewDidLoad{
    [super viewDidLoad];

    //added with containerview from g8productions
    self.containerView =  [[UIView alloc] initWithFrame:CGRectMake(36, 59, 900, 1200)];
    self.scrollView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.scrollView addSubview:self.containerView];
    [self.scrollView setContentSize:self.containerView.bounds.size];
}

希望这些解决方案都适合您!

答案 1 :(得分:0)

我做了类似的事情,我在scrollview委托方法中更新了页面控件:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    // If tag == 0 means that is the scrollview for gallery
    if (scrollView.tag == 0)
    {
        self.pageControllGallery.currentPage = self.sv1ScrollViewGallery.contentOffset.x/320;
    }
    else
    {
        // Change the bottom label text
        int page = (scrollView.contentOffset.x / 320);

        [UIView animateWithDuration:0.3 animations:^{
            self.labelBottom.alpha = 0.0f;
            self.labelBottom.text = [self.arrayOfScrollviews objectAtIndex:page];
            self.labelBottom.alpha = 1.0f;
        }];
    }
}

我计算页面并在PageControll中设置该页面。

不要忘记在.h和元素中设置Scrollview委托。

答案 2 :(得分:0)

要使用“自动布局”调整滚动视图的框架大小,必须明确约束滚动视图的宽度和高度,或者滚动视图的边缘必须绑定到其子树外的视图。

https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-6_0/index.html

如果您可以转储Autolayout,那将是最好的。

查看该链接,他们在底部有一个Pure AutoLayout示例。

基本上使用此代码模式:

@interface ViewController () {
    UIScrollView *scrollView;
    UIImageView *imageView;
}
@end

@implementation ViewController

- (void)viewDidLoad{
    [super viewDidLoad];

    scrollView.translatesAutoresizingMaskIntoConstraints = NO;
    imageView.translatesAutoresizingMaskIntoConstraints = NO;

    [scrollView addSubview:imageView];
    [self.view addSubview:scrollView];


    NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(scrollView,imageView);


    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];

    [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|" options:0 metrics: 0 views:viewsDictionary]];
    [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]|" options:0 metrics: 0 views:viewsDictionary]];
}