Программно центрировать UIImage внутри родительского представления по вертикали - PullRequest
0 голосов
/ 27 мая 2020

Я использую Swift 5.

Цель состоит в том, чтобы центрировать UIImageView вертикально внутри представления. В настоящее время это выглядит так: enter image description here

Обратите внимание, что все пузыри изображений убегают из ячейки.

Это код, который приводит к этому:

    let imageView = UIImageView()

    let width  = self.frame.width
    let height = self.frame.height

    let img_width  = height //* 0.8
    let img_height = height

    let y = (height - img_height)/2
    let x = width*0.05

    imageView.frame = CGRect(
          x: x
        , y: CGFloat(y)
        , width: img_width
        , height: img_height
    )

    let rounded = imageView
        .makeRounded()
        .border(width:1.0, color:Color.white.cgColor)

    self.addSubview(rounded)

Функции расширения imageView:

func makeRounded() -> UIImageView {

    self.layer.borderWidth = 0.5
    self.layer.masksToBounds = false
    self.layer.borderColor = Color.white.cgColor
    self.layer.cornerRadius = self.frame.width/2
    self.clipsToBounds = true

    // see https://developer.apple.com/documentation/uikit/uiview/contentmode
    self.contentMode = .scaleAspectFill

    return self
}

func border( width: CGFloat, color: CGColor ) -> UIImageView{

    self.layer.borderWidth = width
    self.layer.borderColor = color
    return self

}

Что очень ванильно.

Это странно, потому что я расположил текстовое поле по вертикали точно так же, то есть: (parentHeight - childHeight)/2, и оно находится по центру. Вы можете увидеть это в синих текстовых полях во второй и третьей ячейках.

____ РЕДАКТИРОВАТЬ _______

Вот так я выложил ячейку

        let data = dataSource[ row - self._data_source_off_set ]

        let cell  = tableView.dequeueReusableCell(withIdentifier: "OneUserCell", for: indexPath) as! OneUserCell

        // give uuid and set delegate
        cell.uuid = data.uuid
        cell.delegate = self

        // render style: this must be set
        cell.hasFooter = false //true

        cell.imageSource      = data
        cell.headerTextSource = data
        cell.footerTextSource = data

        // color schemes
        cell.backgroundColor = Color.offWhiteLight
        cell.selectionColor = Color.graySecondary

1 Ответ

1 голос
/ 27 мая 2020

Добавьте эти ограничения к вашему imageView и удалите фрейм и его вычисления

self.contentView.addSubview(rounded)
self.mimageView.translatesAutoresizingMaskIntoConstraints = false
self.mimageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor,constant: 20).isActive = true
self.mimageView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
self.mimageView.heightAnchor.constraint(equalTo: contentView.heightAnchor).isActive = true
self.mimageView.widthAnchor.constraint(equalTo: contentView.heightAnchor).isActive = true
...