如何使用滚动视图制作可滚动标签?

Posted

技术标签:

【中文标题】如何使用滚动视图制作可滚动标签?【英文标题】:how to make scrollable label using scroll view? 【发布时间】:2018-03-17 12:12:51 【问题描述】:

我想制作类似文章的内容来读取包含 UIImage 和 Label 嵌套在滚动视图中的视图控制器。

如果文章内容不大,我希望禁用滚动功能,但是如果内容很大,我希望它可以滚动,并且可以滚动到与标签内容高度相同的高度。

(如果内容文章不是太多,那我就不用滚动了)

但如果内容很多,那么我希望我可以滚动。目前,如果内容像下面这样大,我可以滚动

我尝试像下面的代码一样设置底部锚点,但它不起作用。这是我用于底部标签约束和视图层次结构的自动布局

类 NotificationDetailVC: UIViewController

@IBOutlet weak var notificationTitleLabel: UILabel!
@IBOutlet weak var notificationImage: UIImageView!
@IBOutlet weak var notificationDateLabel: UILabel!
@IBOutlet weak var notificationScrollView: UIScrollView!
@IBOutlet weak var notificationContentLabel: UILabel!


var dataNotification : [String:Any]?

override func viewDidLoad() 
    super.viewDidLoad()


    notificationScrollView.contentLayoutGuide.bottomAnchor.constraint(equalTo: notificationContentLabel.bottomAnchor).isActive = true


【问题讨论】:

【参考方案1】:

不要将底部约束设置为大于。只需将其设置为等于。

滚动视图有一个包含所有可滚动视图的内容视图。您必须设置内容视图的高度、宽度和 x,y 位置。

为内容视图设置顶部、底部、前导和尾随约束。

Scrollview 的滚动方向取决于 contantview 的高度和宽度。如果您将内容视图的宽度设置为等于滚动视图,则滚动视图在水平方向上不可滚动。与 height 相同,如果将内容视图的高度设置为等于滚动视图的高度,则滚动视图在垂直方向上不可滚动。

在您的情况下,您必须将内容视图的宽度设置为等于滚动视图的宽度,因此滚动视图在水平方向上不可滚动。内容视图根据子视图自动获取高度(在您的情况下为 UIimageview 和 uilabel)。所以设置 imageview 的高度、顶部、底部约束和 uilabel 的顶部和底部约束,因为 uilabel 高度由它的文本自动设置。在 UILabel 中设置number of line = 0

【讨论】:

【参考方案2】:

将标签底部约束设置为等于任何恒定高度(例如 20)和number of lines = 0

当您使用scrollview 时,您必须为imageview 指定高度。您无需担心标签高度,因为它的高度将由其内容高度计算。

现在你的scrollviewContentHeight = imgView.height + all labels content height。确保每个组件(图像视图和每个标签)都有顶部和底部约束。

这就是你所要做的。

【讨论】:

以上是关于如何使用滚动视图制作可滚动标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何使视图控制器可滚动?

嵌套滚动视图

使用集合视图使视图控制器可滚动

ScrollView 或 List,如何制作特定的可滚动视图 (SwiftUI)

如何将标签变成可滚动标签?

如何制作可缩放的滚动视图?