Изменение высоты 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)