将 UIImageView 对齐到 UIScrollView 的底部
Posted
技术标签:
【中文标题】将 UIImageView 对齐到 UIScrollView 的底部【英文标题】:Align UIImageView to bottom of UIScrollView 【发布时间】:2014-12-07 01:09:28 【问题描述】:我想在滚动视图的底部对齐红色图像。在纵向时它看起来很好,因为滚动视图的高度等于视图高度。
但是在横向模式下它看起来像这样,在横向模式下我希望它完全隐藏,直到用户滚动到滚动视图的底部,以便红色图像始终位于滚动视图的底部。目前它在横向模式下看起来像这样。
我添加了红色图像作为滚动视图的子视图,并对其应用了bottommarginautoresizingmask。
【问题讨论】:
设置自动布局/自动调整大小。 我已经在使用 autoreszingmask 下边距 不仅是下边距,还需要灵活的宽高左右蒙版 这不起作用,这就是我发布这个问题的原因 @hariszaman 如果您使用自动布局,那么问题将很容易解决,否则您必须明确设置框架才能在正确的位置显示视图。 【参考方案1】:如果您使用autoresizing
,则需要将left
、right
、bottom
和flexibleWidth
掩码设置为UIImageView
和UIScrollView
。看看这里附上的图片。
如果您的UIScrollView
覆盖整个屏幕,则为it
设置所有调整大小的遮罩,但为UIImageView
设置上述遮罩。
希望对你有帮助。
模拟器输出:
【讨论】:
【参考方案2】: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
很简单~
【讨论】:
感谢您的回答,我已经使用编码完成了这项工作,但按照说明,我正在寻找仅界面构建器的解决方案 @hariszaman 只能在 IB 中完成。一些布局任务必须在代码中完成。【参考方案3】:只需在视图控制器中添加此方法即可。
-(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
,所以这是唯一的方法。
我刚刚引用了注释。
啊,抱歉我没注意到。【参考方案4】:
Autoresizingmask 不适用于自动布局,在您的 IB 中,在图像上添加顶部空间约束,它将在滚动视图结束时显示您的图像。
【讨论】:
【参考方案5】:您不能仅使用 IB 解决“问题”,因为您必须根据方向更改滚动视图的内容大小。如果您希望图像视图与标签栏重叠,则必须手动将滚动视图的内容大小设置为等于screen_height + abs(tabbar_height - imageview_height)
。
【讨论】:
【参考方案6】:您必须将 uiimageview 固定到滚动视图的底部,它会考虑到 contentSize。希望有帮助
【讨论】:
以上是关于将 UIImageView 对齐到 UIScrollView 的底部的主要内容,如果未能解决你的问题,请参考以下文章
将contentMode设置为UIViewContentModeScaleAspectFit时如何设置UIImageView左对齐或右对齐?