@sportredwhite

Как использовать данные модели в layoutSubviews?

Подскажите плз, как использовать данные модели для расчёта frame.width в кастомном view в layoutSubviews?

Мне надо сделать три view's(полоски на рисунке), размер который зависит от данных(walk, aerobic, run).

В контролере передаю данные в ячейку
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! StepTableViewCell
cell.configure(step)


В StepTableViewCell находится кастомный вью(CustomProgressBar)

И вот как мне это step использовать для расчёта frame.width трёх вьюх в layoutSubviews? Или как бы вы сделали эти три вью?

5c3b4eb4cfb56578846070.png
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
doublench21
@doublench21
t.me/jeudesprits (Если очень надо)
А что тут думать та?

frame.width в кастомном view в layoutSubviews

Что это за набор слов? Зачем?

2570 = 630 + 440 + 1500

2570 - 100%
630 - x
x = (630 * 100) / 2570 ~ 24.5

2570 - 100%
440 - x
x = (440 * 100) / 2570 ~ 17.1

2570 - 100%
1500 - x
x = (1500 * 100) / 2570 ~ 58.3

class StackProgressView: UIView {

  var proportion = 1.0

  override var intrinsicContentSize: CGSize {
    return CGSize(width: proportion, height: 1.0)
  }
}

let stack = UIStackView(frame: CGRect(origin: .zero, size:CGSize(width: 500.0, height: 20.0)))
    stack.distribution = .fillProportionally
    stack.axis = .horizontal
    stack.spacing = 5.0

let walk = StackProgressView(frame: .zero)
    walk.backgroundColor = UIColor(red: 162.0 / 255.0, green: 221.0 / 255.0, blue: 239.0 / 255.0, alpha: 1.0)
    walk.proportion = 24.5
    walk.layer.allowsEdgeAntialiasing = true
    walk.layer.cornerRadius = 5.0
    walk.layer.maskedCorners = [.layerMinXMinYCorner, .layerMinXMaxYCorner]

let aerobic = StackProgressView(frame: .zero)
    aerobic.backgroundColor = UIColor(red: 69.0 / 255.0, green: 187.0 / 255.0, blue: 223.0 / 255.0, alpha: 1.0)
    aerobic.proportion = 17.1

let run = StackProgressView(frame: .zero)
    run.backgroundColor = UIColor(red: 40.0 / 255.0, green: 112.0 / 255.0, blue: 133.0 / 255.0, alpha: 1.0)
    run.proportion = 58.3
    run.layer.allowsEdgeAntialiasing = true
    run.layer.cornerRadius = 5.0
    run.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMaxXMaxYCorner]

stack.addArrangedSubview(walk)
stack.addArrangedSubview(aerobic)
stack.addArrangedSubview(run)


yoPw0or.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 50 000 до 150 000 руб.
FunCorp Москва
от 180 000 до 250 000 руб.
Home Credit Bank Москва
от 150 000 до 300 000 руб.
20 апр. 2019, в 16:31
500 руб./в час
20 апр. 2019, в 15:00
10000 руб./за проект
20 апр. 2019, в 14:48
30000 руб./за проект