RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 977141
Accepted
Arkadiy Brown
Arkadiy Brown
Asked:2020-05-02 17:37:37 +0000 UTC2020-05-02 17:37:37 +0000 UTC 2020-05-02 17:37:37 +0000 UTC

在屏幕上自动定位 UIView

  • 772

任务 - 收到一个包含图片和标题的数组,在屏幕上显示此数据:两张图片,两张图片,等等。(附上实现的截图)。

基本上 - 我已经编写了工作代码,但我不喜欢它 - 我将每张图片和标题放在 UIView 中,并告诉 UIView 在屏幕上显示的位置。如果数组中只有 4 个元素,这很好用,但是如果我想处理 100 个元素,那么提前手动规定每个 UIView 的位置是相当愚蠢的。

在 CSS 中,我会用 float: 将容器排成一排:每隔一秒,我就会换行……)但是如何在 Swift 中实现呢?

let catalogList = ["1.jpg": "Стена", "2.jpg": "Микрофон", "3.jpg": "Инструменты", "4.jpg": "Концерт"]

var currentItems = 0

override func viewDidLoad() {
    super.viewDidLoad()
    for i in catalogList {
        currentItems += 1
        if currentItems <= 2 {
            if currentItems % 2 < 1 {
                addNew(pic: i.key, text: i.value, x: 30, y: 65)
                } else {
                addNew(pic: i.key, text: i.value, x: 220, y: 65)
        }
            } else {
            if currentItems % 2 < 1 {
                addNew(pic: i.key, text: i.value, x: 30, y: 300)
                } else {
                addNew(pic: i.key, text: i.value, x: 220, y: 300)
            }
        }
    }
}

func addNew(pic: String, text: String, x: Int, y: Int) {

    let viewThing = UIView(frame: CGRect(x: x, y: y, width: 165, height: 220))
    self.view.addSubview(viewThing)
    let labelThing = UILabel(frame: CGRect(x: 5, y: 190, width: 165, height: 30))
    labelThing.text = text
    viewThing.addSubview(labelThing)
    let imageThing = UIImageView(frame: CGRect(x: 0, y: 0, width: 165, height: 190))
    imageThing.image = UIImage(named: pic)
    viewThing.addSubview(imageThing)

}

在此处输入图像描述

ios
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    VAndrJ
    2020-05-02T18:06:31Z2020-05-02T18:06:31Z

    UICollectionView必要时使用FlowLayout。根据截图,有条件地,对于每个单元格,将宽度设置为集合宽度的 1/2 减去单元格之间的缩进,将高度设置为单元格宽度的 3/2:

    let itemsPerRow: CGFloat = 2
    let sectionInsets = UIEdgeInsets(top: 50.0, left: 20.0, bottom: 50.0, right: 20.0)
    ...
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> CGSize {
        let paddingSpace = sectionInsets.left * (itemsPerRow + 1) 
        let availableWidth = collectionView.bounds.width - paddingSpace
        let widthPerItem = availableWidth / itemsPerRow
        let heightPerItem = widthPerItem * 3 / 2
        return CGSize(width: widthPerItem, height: heightPerItem)
    }
    

    链接到文档

    raywenderlich.com 上的非常详细和详细的示例

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5