Выровняйте UIImageView к нижней части UIScrollView
Я хочу выровнять красное изображение внизу прокрутки. В портретной ориентации это выглядит хорошо, так как высота прокрутки равна высоте просмотра.
Но в ландшафтном режиме это выглядит так, когда в альбомной ориентации я хочу, чтобы он был полностью скрыт до тех пор, пока пользователь не прокрутит до конца прокрутки, чтобы красное изображение всегда находилось внизу прокрутки. В настоящее время это выглядит так в ландшафтном режиме.
Я добавил красное изображение в качестве подпредставления scrollview и применил к нему bottommarginautoresizingmask.
6 ответов
Если вы используете autoresizing
тогда вам нужно установить left
, right
, bottom
а также flexibleWidth
маски для обоих UIImageView
а также UIScrollView
, Посмотрите на изображения здесь.
Если твой UIScrollView
охватывает весь экран, затем установите все маски изменения размера для it
но для UIImageView
установите только те, которые указаны выше.
Надеюсь, поможет.
Выход в симулятор:
Autoresizingmask
не работает при использовании автоматического макета. AutoLayout выключится translatesAutoresizingMaskIntoConstraints
просмотров, расшифрованных из файла раскадровки. Но вы все равно можете установить его на YES
в коде, если вы хотите. Но я не рекомендую вам это делать. Придерживайтесь AutoLayout, если вы хотите сделать его простым и элегантным. Что вы должны сделать, это использовать AutoLayout для макета изображения.
То, что вы хотите сделать здесь, не может быть сделано только в IB. Разметка AutoLayout, основанная на их краях. В вашем случае отношение между изображением и прокруткой отличается в портретной и альбомной ориентации. В портретной ориентации нижний край просмотра изображения выравнивается по нижнему краю просмотра прокрутки. Но в альбомной ориентации верхний край представления изображения выравнивается по нижнему краю представления прокрутки. Невозможно использовать только один набор ограничений для достижения вашей цели. Вы можете добавить ограничение к представлению изображения в IB, которое выравнивает нижний край представления изображения с нижним краем представления прокрутки, как первое изображение в вашем вопросе. затем IBOutlet
это ограничение для вашего контроллера представления. Когда ориентация устройства изменилась, вы можете просто изменить константу ограничения. Это что-то вроде этого:
@interface ViewController ()
@property (nonatomic, weak) UIImageView *imageView; // the image view
@property (nonatomic, weak) NSLayoutConstraint *imageBottomToScrollView; // the constraint you added in IB to the image view
@end
@implementation ViewController
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(orientation)) {
self.imageBottomToScrollView.constant = -CGRectGetHeight(self.imageView.frame);
} else if (UIDeviceOrientationIsPortrait(orientation)) {
self.imageBottomToScrollView.constant = 0;
}
}
@end
Это очень легко ~
Просто добавьте этот метод в свой контроллер представления.
-(void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
CGSize contentSize = self.scrollView.contentSize;
CGRect frame = self.imageView.frame;
frame.origin.x = 0;
frame.size.width = self.scrollView.frame.size.width;
frame.size.height = Expected_Height;
frame.origin.y = contentSize.height - frame.size.height;
self.imageView.frame = frame;
}
Autoresizingmask не будет работать с автоматическим макетом, в вашем IB, добавьте ограничение Top top на изображение, которое будет отображаться в конце прокрутки.
Вы не можете решить "проблему", используя только IB, потому что вам нужно изменить размер содержимого scrollview относительно ориентации. Если вы хотите, чтобы представление изображений перекрывалось панелью вкладок, вы должны вручную установить размер содержимого для прокрутки, равный screen_height + abs(tabbar_height - imageview_height)
,
Вы должны прикрепить uiimageview к нижней части прокрутки, и оно будет учитывать contentSize. надеюсь, это поможет