У меня проблема с UIControl и Autolayout. Я создал пользовательский UIControl, затем добавляю его с помощью Interface Builder, а затем добавляю ограничения. Элемент управления похож на UIPageControl и работает следующим образом: для каждой страницы добавляется одна точка и изменяется ширина элемента управления. Проблема в том, что я не знаю, как программно изменить размер UIControl и сохранить управление с помощью Autolayout.Изменение ширины пользовательского UIControl и сохранение в центре с помощью Autolayout
Прикрепленный файл, где вы видите одну из проблем, размер, особенно ширину. Желтая часть центрирована, но точки находятся вне коробки.
Спасибо!
EDIT 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);
}
}
UPDATE 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);
}
Как вы меняете ширину? Внутренний размер содержимого? Показать код. – Wain
Wain, я обновил вопрос. Благодаря! – mhergon
Является ли желтая коробка на скриншоте цветом фона этого контроллера? I.e., являются ли точки, выходящие за пределы его рамки? И устанавливаете ли вы ограничения в IB или в коде? –