Изменение высоты UIView с отключением автовыключения

Отключил автоматическую компоновку для представления. Однако это не сработает. У меня нет ограничений относительно высоты. Только ширина, равная ширине родительских представлений.

@IBOutlet weak var questionTextView: UITextView!
override func viewDidLoad() {
  var newFrame = CGRectMake(0, 0, 300, 202)
  questionView.frame = newFrame
}

Ответ 1

Вы отключили автоматическую компоновку для всего элемента в построителе интерфейса?

Вы не можете отключить автоматическую компоновку для определенных под-представлений в построителе интерфейса - вы можете делать это только во время выполнения программно.

Основываясь на том, что вы сказали, у вас все еще есть ограничение. Как у вас есть ограничения, когда вы уже отключили автомасштабирование?

Если у вас включен автоматический макет, установка высоты для вашего представления с использованием фрейма не будет работать, так как это противоречит правилам автоматического макета.

Если вам нужно изменить высоту представления с активным автоматическим макетом, вам нужно создать IBOutlet для ограничения высоты и изменить его во время выполнения, то есть:

@IBOutlet weak var heightConstraint: NSLayoutConstraint!

self.heightConstraint.constant = 200

Ответ 2

[редактировать]

пс. В принятом ответе говорится: If you have auto layout active, setting the height for your view by using the frame won't work since it'll conflict with auto layout rules. Этот мир кода меняет кадр, поэтому, если вы пытаетесь использовать этот код с помощью Auto Layout, он не будет работать.


[оригинальный ответ]

Вы также можете создать расширение UIView:

UIViewExtensions.swift:

import Foundation
import UIKit

extension UIView {

    // MARK: - Frame

    /**
    Redefines the height of the view

    :param: height The new value for the view height
    */
    func setHeight(height: CGFloat) {

        var frame: CGRect = self.frame
        frame.size.height = height

        self.frame = frame
    }

    /**
    Redefines the width of the view

    :param: width The new value for the view width
    */
    func setWidth(width: CGFloat) {

        var frame: CGRect = self.frame
        frame.size.width = width

        self.frame = frame
    }

    /**
    Redefines X position of the view

    :param: x The new x-coordinate of the view origin point
    */
    func setX(x: CGFloat) {

        var frame: CGRect = self.frame
        frame.origin.x = x

        self.frame = frame
    }

    /**
    Redefines Y position of the view

    :param: y The new y-coordinate of the view origin point
    */
    func setY(y: CGFloat) {

        var frame: CGRect = self.frame
        frame.origin.y = y

        self.frame = frame
    }
}

Я также добавил методы для установки ширины X и Y. Вы можете использовать это расширение в любом виде, которое хотите:

yourView.setHeght(100)

Ответ 3

Попробуйте что-то вроде этого:

var someView = UITextView(frame: CGRect(x: 0, y: 0, width: **view.bounds.size.width**, height: 123))
        someView.layer.backgroundColor = UIColor.orangeColor().CGColor
        view.addSubview(someView)

В вашем случае измените представление с родительским представлением.

Ответ 4

Вам просто нужно реализовать translatesAutoresizingMaskIntoConstraints, и, установив его в true, вы можете писать свои ограничения с помощью кода, не занимаясь другими вещами.

Пример: view.translatesAutoresizingMaskIntoConstraints = true

//Этот код будет работать

view.frame = CGRect(x: self.playerChatBackground.frame.origin.x, y:                                     
self.playerChatBackground.frame.origin.y, width: 100.0, height: 36.0)