web-dev-qa-db-ja.com

自動レイアウトをオフにしてUIViewの高さを変更する

ビューの自動レイアウトをオフにしました。ただし、これは機能しません。身長に制限はありません。親ビューの幅と等しい幅のみ。

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

Interface Builderでペン先全体の自動レイアウトをオフにしましたか?

InterfaceBuilderで特定のサブビューの自動レイアウトをオフにすることはできません。プログラムで実行時にのみオフにすることができます。

あなたが言ったことに基づいて、あなたはまだアクティブな制約を持っています。すでに自動レイアウトをオフにしている場合、どのように制約がありますか?

自動レイアウトをアクティブにしている場合、フレームを使用してビューの高さを設定すると、自動レイアウトルールと競合するため、機能しません。

自動レイアウトをアクティブにしてビューの高さを変更する必要がある場合は、高さ制約用にIBOutletを作成し、実行時にそれを変更する必要があります。

@IBOutlet weak var heightConstraint: NSLayoutConstraint!

self.heightConstraint.constant = 200
29
mmilo

[編集済み]

ps。受け入れられた答えが言うように: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。このコードの平和はフレームを変更するので、自動レイアウトでこのコードを使用しようとすると、機能しません。


[元の回答]

UIView拡張機能を作成することもできます。

IViewExtensions.Swift

import Foundation
import UIKit

extension UIView {

    // MARK: - Frame

    /**
    Redefines the height of the view

    :param: height The new value for the view's 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's 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's 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's Origin point
    */
    func setY(y: CGFloat) {

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

        self.frame = frame
    }
}

また、幅、X、Yを設定する方法も追加しました。この拡張機能は、次のような任意のビューで使用できます。

yourView.setHeght(100)
3
Raphael Silva

次のようなものを試してください。

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)

あなたの場合、親ビューでビューを変更します。

1
Salihcyilmaz

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)
1
Coder123