更改自定义UIControl的宽度并保持以Autolayout为中心

时间:2014-03-19 23:32:33

标签: ios width autolayout uipagecontrol uicontrol

我遇到了UIControl和Autolayout的问题。 我创建了一个自定义UIControl,然后我用Interface Builder添加它,然后添加约束。 该控件类似于UIPageControl并且工作方式如下,对于每个页面,添加一个点并且控件的宽度发生变化。问题是我不知道如何以编程方式调整UIControl的大小并使控件以Autolayout为中心。

我附上了一张图片,你看到其中一个问题,尺寸,特别是宽度。 黄色部分居中,但点开箱即用。

谢谢!

enter image description here

编辑1

这是我更新点数时的代码:

- (void)reloadNumberOfPages:(NSUInteger)pages {

    // Remove previous images
    for (UIView *v in self.subviews) {
        [v removeFromSuperview];
    }

    // Change size
    CGFloat width = _dotSize.width * pages;
    CGPoint center = self.center;

    // Change size
    self.frame = ({

        CGRect frame = self.frame;
        frame.size.width = width;
        frame.size.height = _dotSize.height;
        frame;

    });
    self.center = center;

    // Add images
    CGFloat offSet = 0.0;
    for (int x = 0; x < pages; x++) {

        // Image
        UIImageView *dot = [[UIImageView alloc] initWithImage:_dotOFF
                                             highlightedImage:_dotON];
        dot.frame = CGRectMake(offSet, 0.0, _dotSize.width, _dotSize.height);
        dot.center = CGPointMake(CGRectGetMidX(dot.frame), CGRectGetHeight(self.bounds) / 2.0);
        dot.tag = x;
        [self addSubview:dot];

        // Añadimos offSet
        offSet += CGRectGetWidth(dot.bounds);

    }

}

更新1

我正在尝试使用“intrinsicContentSize”,但它不起作用

- (void)reloadNumberOfPages:(NSUInteger)pages {

    // Add images
    CGFloat offSet = 0.0;
    for (int x = 0; x < pages; x++) {

        // Image
        UIImageView *dot = [[UIImageView alloc] initWithImage:_dotOFF
                                             highlightedImage:_dotON];
        dot.frame = CGRectMake(offSet, 0.0, _dotSize.width, _dotSize.height);
        dot.center = CGPointMake(CGRectGetMidX(dot.frame), CGRectGetHeight(self.bounds) / 2.0);
        dot.tag = x;
        [self addSubview:dot];

        // Añadimos offSet
        offSet += CGRectGetWidth(dot.bounds);

    }

    [self invalidateIntrinsicContentSize];

}

- (CGSize)intrinsicContentSize {
    return CGSizeMake(_dotSize.width * _numberOfPages, _dotSize.height);
}

1 个答案:

答案 0 :(得分:0)

如果您使用自动布局来定位自定义视图,则不应设置其框架或中心。摆脱self.frame =self.center =行并实施intrinsicContentSize

-(CGSize)intrinsicContentSize {
    return CGSizeMake(_dotSize.width * pages, _dotSize.height);
}