Xcode滚动视图不起作用

Posted

技术标签:

【中文标题】Xcode滚动视图不起作用【英文标题】:Xcode scrollview not working 【发布时间】:2017-11-14 03:48:55 【问题描述】:

我正在制作游戏,需要用户签署最终用户许可协议 (EULA)。 EULA 很长,需要滚动视图。我希望屏幕本身保持静止,因此按钮和标题始终存在:

这是我的 viewController 故事板的截图:

这是我的代码:

@IBOutlet var eulaView: UIView!
@IBOutlet var scrollView: UIScrollView!
@IBOutlet var label: UILabel!


override func viewDidLoad() 
    super.viewDidLoad()

    let width = eulaView.frame.width
    let height = eulaView.frame.height

    self.scrollView.frame = CGRect(x: 0, y: 0, width: width, height: height)

    self.label.frame = CGRect(x: 0, y: 0, width: width , height: 2000)
    self.label.text = "Lots of stuff"


奇怪的是,如果我将 self.label.frame 的宽度设置为 100,它就会显示出来。如果我将其设置为 300 或“宽度”,则标签会消失。

无论如何,滚动视图都不会滚动。

PS:我之前有它工作过,但后来我在 iPhone X 模拟器上试了一下,它是空白的。

【问题讨论】:

【参考方案1】:

你需要设置self.scrollView.contentSize = CGSize(width: width,height: 2000)

有时当您在情节提要中更改设备时,屏幕空白可能是xcode的错误。

查找标签的动态高度取决于标签的字符串。

func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat
    let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
    label.numberOfLines = 0
    label.lineBreakMode = NSLineBreakMode.byWordWrapping
    label.font = font
    label.text = text
    label.sizeToFit()

    return label.frame.height

【讨论】:

关于如何动态编辑 contentSize 高度有什么想法吗? 如果你想动态编辑 contentSize 你应该使用约束,而不仅仅是添加子视图 如何修改字体以适应整个事物的大小? Hi@MasonBallowe,您可以将约束设置为增加基于内容的组件,它会根据内容增加。

以上是关于Xcode滚动视图不起作用的主要内容,如果未能解决你的问题,请参考以下文章

滚动视图中元素的 SwiftUI 动画不起作用? Xcode GM 更新

滚动视图不在自动布局 xcode 6.4 中滚动

我无法在 Swift Xcode 的视图控制器中集成水平滚动视图

Swift - UIScrollView 滚动动画在 viewDidLoad() 中不起作用

缩放在滚动视图中不起作用

iOS 滚动视图不起作用