1515
1616#define DEFAULT_INDICATOR_WIDTH 6 .0f
1717#define DEFAULT_INDICATOR_MARGIN 10 .0f
18+ #define DEFAULT_MIN_HEIGHT 36 .0f
1819
1920#define DEFAULT_INDICATOR_WIDTH_LARGE 7 .0f
2021#define DEFAULT_INDICATOR_MARGIN_LARGE 9 .0f
21-
22- #define MIN_HEIGHT 36 .0f
22+ #define DEFAULT_MIN_HEIGHT_LARGE 36 .0f
2323
2424typedef NS_ENUM (NSUInteger , SMPageControlImageType) {
2525 SMPageControlImageTypeNormal = 1 ,
@@ -370,9 +370,18 @@ - (UIImage *)imageMaskForPage:(NSInteger)pageIndex
370370
371371- (CGSize)sizeThatFits : (CGSize)size
372372{
373- CGSize sizeThatFits = [self sizeForNumberOfPages: self .numberOfPages];
374- sizeThatFits.height = MAX (sizeThatFits.height , MIN_HEIGHT);
375- return sizeThatFits;
373+ CGSize sizeThatFits = [self sizeForNumberOfPages: self .numberOfPages];
374+ sizeThatFits.height = MAX (sizeThatFits.height , _minHeight);
375+ return sizeThatFits;
376+ }
377+
378+ - (CGSize)intrinsicContentSize
379+ {
380+ if (_numberOfPages < 1 || (_numberOfPages < 2 && _hidesForSinglePage)) {
381+ return CGSizeMake (UIViewNoIntrinsicMetric, 0 .0f );
382+ }
383+ CGSize intrinsicContentSize = CGSizeMake (UIViewNoIntrinsicMetric, MAX (_measuredIndicatorHeight, _minHeight));
384+ return intrinsicContentSize;
376385}
377386
378387- (void )updatePageNumberForScrollView : (UIScrollView *)scrollView
@@ -395,12 +404,14 @@ - (void)setStyleWithDefaults:(SMPageControlStyleDefaults)defaultStyle
395404 self.indicatorDiameter = DEFAULT_INDICATOR_WIDTH_LARGE;
396405 self.indicatorMargin = DEFAULT_INDICATOR_MARGIN_LARGE;
397406 self.pageIndicatorTintColor = [[UIColor whiteColor ] colorWithAlphaComponent: 0 .2f ];
407+ self.minHeight = DEFAULT_MIN_HEIGHT_LARGE;
398408 break ;
399409 case SMPageControlDefaultStyleClassic:
400410 default :
401411 self.indicatorDiameter = DEFAULT_INDICATOR_WIDTH;
402412 self.indicatorMargin = DEFAULT_INDICATOR_MARGIN;
403413 self.pageIndicatorTintColor = [[UIColor whiteColor ] colorWithAlphaComponent: 0 .3f ];
414+ self.minHeight = DEFAULT_MIN_HEIGHT;
404415 break ;
405416 }
406417}
@@ -452,6 +463,10 @@ - (void)_updateMeasuredIndicatorSizes
452463 if (self.pageIndicatorMaskImage ) {
453464 [self _updateMeasuredIndicatorSizeWithSize: self .pageIndicatorMaskImage.size];
454465 }
466+
467+ if ([self respondsToSelector: @selector (invalidateIntrinsicContentSize )]) {
468+ [self invalidateIntrinsicContentSize ];
469+ }
455470}
456471
457472
@@ -510,6 +525,12 @@ - (void)setIndicatorDiameter:(CGFloat)indicatorDiameter
510525 }
511526
512527 _indicatorDiameter = indicatorDiameter;
528+
529+ // Absolute minimum height of the control is the indicator diameter
530+ if (_minHeight < indicatorDiameter) {
531+ self.minHeight = indicatorDiameter;
532+ }
533+
513534 [self _updateMeasuredIndicatorSizes ];
514535 [self setNeedsDisplay ];
515536}
@@ -524,6 +545,24 @@ - (void)setIndicatorMargin:(CGFloat)indicatorMargin
524545 [self setNeedsDisplay ];
525546}
526547
548+ - (void )setMinHeight : (CGFloat)minHeight
549+ {
550+ if (minHeight == _minHeight) {
551+ return ;
552+ }
553+
554+ // Absolute minimum height of the control is the indicator diameter
555+ if (minHeight < _indicatorDiameter) {
556+ minHeight = _indicatorDiameter;
557+ }
558+
559+ _minHeight = minHeight;
560+ if ([self respondsToSelector: @selector (invalidateIntrinsicContentSize )]) {
561+ [self invalidateIntrinsicContentSize ];
562+ }
563+ [self setNeedsLayout ];
564+ }
565+
527566- (void )setNumberOfPages : (NSInteger )numberOfPages
528567{
529568 if (numberOfPages == _numberOfPages) {
@@ -533,6 +572,9 @@ - (void)setNumberOfPages:(NSInteger)numberOfPages
533572 self.accessibilityPageControl .numberOfPages = numberOfPages;
534573
535574 _numberOfPages = MAX (0 , numberOfPages);
575+ if ([self respondsToSelector: @selector (invalidateIntrinsicContentSize )]) {
576+ [self invalidateIntrinsicContentSize ];
577+ }
536578 [self updateAccessibilityValue ];
537579 [self setNeedsDisplay ];
538580}
0 commit comments