ios Swift tableView dynamici c ограничения ячеек для меток и изображений программно - PullRequest
1 голос
/ 07 апреля 2020

У меня есть этикетки и изображение. Я хочу метки над изображением. И изображение без ограничений на начальные и конечные поля.

Я пробовал следующие ограничения, но, похоже, не могу сделать это правильно. И высота строки для ячеек не корректируется соответственно в ландшафтном режиме.

    addSubview(videolabel1)
    videolabel1.translatesAutoresizingMaskIntoConstraints = false
    videolabel1.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20).isActive = true
    videolabel1.trailingAnchor.constraint(equalTo: trailingAnchor
        , constant: 20).isActive  = true

    videolabel1.topAnchor.constraint(equalTo: topAnchor, constant: 20).isActive = true
    videolabel1.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 20).isActive = true


    addSubview(image)
    image.translatesAutoresizingMaskIntoConstraints = false
    image.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
    image.trailingAnchor.constraint(equalTo: trailingAnchor).isActive  = true
    image.heightAnchor.constraint(equalToConstant: 150).isActive = true
    image.widthAnchor.constraint(equalTo: videoimage.heightAnchor
        , multiplier: 16/9).isActive = true

    image.topAnchor.constraint(equalTo: videodate.bottomAnchor, constant: 12).isActive = true
    image.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 12).isActive = true

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Попробуйте использовать UIStackView, если хотите упорядочить виды по горизонтали или вертикали. UIStackView может позаботиться о большинстве ограничений для вас. Вы можете попробовать добавить родителя UIStackView с вертикальной ориентацией, который содержит еще один UIStackView с горизонтальной ориентацией (этот UIStackView будет содержать два UILabel's), за которым следует UIImageView и еще один UILabel.

parentStackView = UIStackView()
parentStackView.axis = .vertical
parentStackView.distribution = .equalSpacing
parentStackView.translatesAutoresizingMaskIntoConstraints = false
self.contentView.addSubview(parentStackView)
parentStackView.topAnchor.constraint(equalTo: self.contentView.topAnchor).isActive = true
parentStackView.widthAnchor.constraint(equalTo: self.contentView.widthAnchor, multiplier: 1).isActive = true
parentStackView.heightAnchor.constraint(equalTo: self.contentView.heightAnchor, multiplier: 1).isActive = true

parentStackView.isLayoutMarginsRelativeArrangement = true
parentStackView.addArrangedSubview(stackView)
stackView.axis = .horizontal
stackView.distribution = .equalSpacing
stackView.spacing = 10
stackView.addArrangedSubview(label)
label.text = "First Label";
stackView.addArrangedSubview(label2)
label2.text = "Second Label";
parentStackView.addArrangedSubview(imageView);
imageView.image = UIImage(named: "imageview");
NSLayoutConstraint.activate([imageView.heightAnchor.constraint(equalToConstant:UIScreen.main.bounds.width / 2) ]);
imageView.contentMode = .scaleAspectFill;
imageView.clipsToBounds = true;
parentStackView.addArrangedSubview(label3)
label3.text = "Vertical Label below Image";

Результат будет выглядеть примерно так:

enter image description here

0 голосов
/ 07 апреля 2020

Установите нижний и верхний якорь в соответствии с последовательным видом сверху и снизу. Здесь вы устанавливаете нижнюю привязку и видеолаборации1, и видеодаты на нижнюю привязку, что неверно: -

установите конечную и верхнюю привязку videoLabel и удалите нижнюю привязку: -

videolabel1.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -20).isActive  = true
videolabel1.topAnchor.constraint(equalTo: topAnchor, constant: 20).isActive = true

установите задний якорь videoLabel, как показано ниже, и удалите нижний якорь: -

videodate.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -20).isActive  = true

Также удалите нижний якорь imagview и установите постоянную нижнего якоря, как показано ниже: -

videotitle.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -12).isActive = true
...