我遇到了UIControl和Autolayout的问题。 我创建了一个自定义UIControl,然后我用Interface Builder添加它,然后添加约束。 该控件类似于UIPageControl并且工作方式如下,对于每个页面,添加一个点并且控件的宽度发生变化。问题是我不知道如何以编程方式调整UIControl的大小并使控件以Autolayout为中心。
我附上了一张图片,你看到其中一个问题,尺寸,特别是宽度。 黄色部分居中,但点开箱即用。
谢谢!
编辑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);
}
答案 0 :(得分:0)
如果您使用自动布局来定位自定义视图,则不应设置其框架或中心。摆脱self.frame =
和self.center =
行并实施intrinsicContentSize
:
-(CGSize)intrinsicContentSize {
return CGSizeMake(_dotSize.width * pages, _dotSize.height);
}