ARSPopover
ARSPopover copied to clipboard
Auto Layout support?
As a very simple sample I'm trying to display a multi-line UILabel in an ARSPopover using Auto Layout to break it into multiple lines and to ensure that the popover's content size fits within the screen:
ARSPopover *popover = [ARSPopover new];
popover.sourceView = sourceView;
popover.sourceRect = CGRectMake(CGRectGetMidX(sourceView.bounds), CGRectGetMaxY(sourceView.bounds), 0.0f, 0.0f);
// popover.contentSize = CGSizeMake(200.0f, 100.0f);
popover.arrowDirection = UIPopoverArrowDirectionUp;
[popover insertContentIntoPopover:^(ARSPopover *popover, CGSize popoverPresentedSize, CGFloat popoverArrowHeight) {
UILabel *label = [[UILabel alloc] init];
label.text = @"This is a tutorial view! Let's see if this works properly.";
label.numberOfLines = 0;
label.textAlignment = NSTextAlignmentLeft;
[label sizeToFit];
[popover.view addSubview:label];
[popover.view addConstraint:[NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:popover.view attribute:NSLayoutAttributeLeftMargin multiplier:1.0f constant:0.0f]];
[popover.view addConstraint:[NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:popover.view attribute:NSLayoutAttributeRightMargin multiplier:1.0f constant:0.0f]];
[popover.view addConstraint:[NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:popover.view attribute:NSLayoutAttributeTopMargin multiplier:1.0f constant:0.0f]];
[popover.view addConstraint:[NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:popover.view attribute:NSLayoutAttributeBottomMargin multiplier:1.0f constant:0.0f]];
[popover.view setNeedsUpdateConstraints];
[popover.view layoutIfNeeded];
}];
[self presentViewController:popover animated:YES completion:nil];
However it doesn't seem like ARSPopover supports Auto Layout.
In case you want to use AutoLayout, then you should do layout configurations after you call [self presentViewController:popover animated:YES completion:nil];
. I know it sounds strange, but Apple advises to do it in such manner.
This issue is old but, as I see ARSPopover
is just a subclass of UIViewController
which automatically set its modalPresentationStyle
to popover
. So you can just subclass ARSPopover
and set up your views with auto layout like normal view controller, without the need of calling -insertContentIntoPopover:
.