如何在 swift 中设置 UIScrollView 内的全宽图像
Posted
技术标签:
【中文标题】如何在 swift 中设置 UIScrollView 内的全宽图像【英文标题】:How to set full width image inside UIScrollView in swift 【发布时间】:2016-01-04 18:18:46 【问题描述】:我需要在 Storyboard 中添加的 UIViewController
中显示大量内容,因此我添加了 UIScrollView
并带有 top、right、bottom、left:0 约束(使其全屏显示)。
在UIScrollView
的顶部,我需要一个方形图像,其宽度为设备屏幕尺寸,所以我添加了UIImageView
约束:纵横比->1:1,顶部:0,容器中心对齐,高度: 100。
在它下面有一个UILabel
,我想在其中显示大文本。我正在使用自动布局。
-
Storyboard 中是否有执行此操作的选项?
我在下面快速尝试了
控制器文件中的连接图像为:
@IBOutlet weak var eventThumb: UIImageView!
override func viewDidLoad()
super.viewDidLoad()
// set image path from url ,it works
eventThumb.image = UIImage(data: NSData(contentsOfURL: NSURL(string: self.event!.image)!)!)
let screenSize: CGRect = UIScreen.mainScreen().bounds
eventThumb.frame = CGRectMake( 0, 0, screenSize.width, screenSize.width)
我尝试了给出here、here 和here 的相关答案,但它们似乎不适用于我的情况。
我是 swift 和 ios 的新手,我在结构上做错了吗?
编辑: 已添加图片
【问题讨论】:
eventThumb.frame = CGRectMake(0, 0, screenSize.width, screenSize.width)。此代码没有使图像全宽与屏幕尺寸相同,我在情节提要中显示相同尺寸的图像 【参考方案1】:调用它:
override func viewDidLayoutSubviews()
super.viewDidLayoutSubviews()
// your layout code goes here, AFTER the call to super
你忘了在你的代码之前调用 super。
【讨论】:
很好的答案!小错字:在“”之前用“()”完成函数签名,func应该是“override”+1【参考方案2】:您曾尝试制作具有以下屏幕尺寸的框架
eventThumb.frame = CGRectMake( 0, 0, screenSize.width, screenSize.width)
请与
核对eventThumb.frame = CGRectMake( 0, 0, screenSize.width, screenSize.height)
【讨论】:
【参考方案3】:只需尝试以下步骤:
首先删除此处您可以在图片中看到的所有红线 现在保持该行不变,在此设置 Imageview 框架注意:
我已经在 swift 中尝试过这个解决方案并为我工作。我希望它对你有用。已编辑:
正如您提到的,您使用的是自动布局,因此无需禁用它。只做一件事 将您正在设置图像视图框架的行放入此方法中: -(void)viewDidLayoutSubviews【讨论】:
谢谢,但我在我的应用程序中使用自动布局。您的解决方案似乎使用固定宽度布局。 我担心的是,因为我在整个应用程序中使用自动布局,我没有得到你建议的选项。如果我从情节提要中删除自动布局选项会影响我不想要的整个应用程序仅用于此选项。我还可以选择自动布局选项吗? 因为我在整个应用程序中使用自动布局,我没有得到你建议的选项。我在我现在得到的问题编辑中添加了图像。 我添加了 override func viewDidLayoutSubviews() let screenSize: CGRect = UIScreen.mainScreen().bounds eventThumn.frame = CGRectMake(0,0, screenSize.height , screenSize.width) 它设置了屏幕加载时的图像大小。但是当我滚动页面时(因为它在滚动视图中)它会重置为旧大小以上是关于如何在 swift 中设置 UIScrollView 内的全宽图像的主要内容,如果未能解决你的问题,请参考以下文章