使用 SnapKit 长宽比和更小的尺寸

Posted

技术标签:

【中文标题】使用 SnapKit 长宽比和更小的尺寸【英文标题】:Using SnapKit to Aspect Ratio and less size 【发布时间】:2019-09-11 17:46:12 【问题描述】:

我正在尝试在 SnapKit 中创建此布局的约束,但我很难设置最大尺寸 (lessThanOrEqual)。

let maxWidthContainer: CGFloat = 435
let maxHeightContainer: CGFloat = 600

containerView.snp.makeConstraints 
    $0.width.equalTo(containerView.snp.height).multipliedBy(maxWidthContainer / maxHeightContainer)
    $0.centerX.centerY.equalToSuperview()
    $0.leading.trailing.equalToSuperview().inset(38).priorityLow()

【问题讨论】:

SnapKit 确实有 .lessThanOrEqualTo(...).greaterThanOrEqualTo(...) 方法......也许如果你描述一下你想要做什么? @DonMag 我需要我的视图来保持 435:600 的纵横比和不超过这个比例的大小。也就是说,在 iPhone 上,尺寸会比定义的要小,而在 iPad 上,尺寸正是这样。我能够使用 XIB 创建此行为,但通过 SnapKit 代码我不能。 【参考方案1】:

如果我明白你的目的,应该这样做:

    let v = UIView()
    v.backgroundColor = .blue
    view.addSubview(v)

    let maxWidthContainer: CGFloat = 435
    let maxHeightContainer: CGFloat = 600

    v.snp.makeConstraints  (make) in
        // centered X and Y
        make.centerX.centerY.equalToSuperview()

        // at least 38 points "padding" on all 4 sides

        // leading and top >= 38
        make.leading.top.greaterThanOrEqualTo(38)

        // trailing and bottom <= 38
        make.trailing.bottom.lessThanOrEqualTo(38)

        // width ratio to height
        make.width.equalTo(v.snp.height).multipliedBy(maxWidthContainer/maxHeightContainer)

        // width and height equal to superview width and height with high priority (but not required)
        // this will make it as tall and wide as possible, until it violates another constraint
        make.width.height.equalToSuperview().priority(.high)

        // max height
        make.height.lessThanOrEqualTo(maxHeightContainer)
    

【讨论】:

以上是关于使用 SnapKit 长宽比和更小的尺寸的主要内容,如果未能解决你的问题,请参考以下文章

使用 grad 将 PyTorch 张量调整为更小的尺寸

当窗口垂直调整为更小的尺寸时,避免 WPF 状态栏完全折叠

如何将iframe视频缩放到更小的尺寸以适应iOS中的UIWebView框架?

响应式设计:不要过度依赖屏幕尺寸

在 Java 中生成更小的 code-128 条码

以编程方式(使用 SnapKit)构建 UI 时如何正确使用尺寸类?