web-dev-qa-db-ja.com

UIViewサイズを変更するにはどうすればよいですか?

起動時にUIViewの高さを変更するのに問題があります。

UIViewを使用する必要があり、一方を画面サイズ* 70にし、もう一方をギャップを埋めたいです。

ここに私が持っているものがあります

 @IBOutlet weak var questionFrame: UIView!
 @IBOutlet weak var answerFrame: UIView!
 let screenSize:CGRect = UIScreen.mainScreen().bounds

そして

 questionFrame.frame.size.height = screenSize.height * 0.70
 answerFrame.frame.size.height = screenSize.height * 0.30

実行中はアプリに影響しません。自動レイアウトを使用しますが、マージンの制約のみがあります...

私はそれをすべて間違っていますか?

54
SKYnine

どうぞ。これは動作するはずです。

questionFrame.frame = CGRectMake(0 , 0, self.view.frame.width, self.view.frame.height * 0.7) 

answerFrame.frame =  CGRectMake(0 , self.view.frame.height * 0.7, self.view.frame.width, self.view.frame.height * 0.3)
47
User4

これは、Swift 3.最新バージョンでの作業MAY- 2019のさまざまな方法で実現できます。

ビューの高さと幅の値を直接割り当てる:

userView.frame.size.height = 0

userView.frame.size.width = 10

フレームにCGRectを割り当てる

userView.frame =  CGRect(x:0, y: 0, width:0, height:0)

メソッドの詳細:

CGRect(x:Xのポイント、y:Yのポイント、幅:ビューの幅、高さ:ビューの高さ)

CGRECTの拡張メソッドを使用

Swiftファイルに次の拡張コードを追加します。

extension CGRect {

    init(_ x:CGFloat, _ y:CGFloat, _ w:CGFloat, _ h:CGFloat) {

        self.init(x:x, y:y, width:w, height:h)
    }
}

ビューのアプリケーションの任意の場所で次のコードを使用して、サイズパラメータを設定します。

userView.frame =  CGRect(1, 1, 20, 45)
43

Swift 3およびSwift 4:

myView.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
24

こんにちは作成したい場合は、これを拡張します。 2015年の更新Swift 2.

ファイルExtends.Swiftの作成および追加このコード(追加インポート基盤高さを変更する場所)

/**
Get Set x Position

- parameter x: CGFloat
by DaRk-_-D0G
*/
var x:CGFloat {
    get {
        return self.frame.Origin.x
    }
    set {
        self.frame.Origin.x = newValue
    }
}
/**
Get Set y Position

- parameter y: CGFloat
by DaRk-_-D0G
*/
var y:CGFloat {
    get {
        return self.frame.Origin.y
    }
    set {
        self.frame.Origin.y = newValue
    }
}
/**
Get Set Height

- parameter height: CGFloat
by DaRk-_-D0G
*/
var height:CGFloat {
    get {
        return self.frame.size.height
    }
    set {
        self.frame.size.height = newValue
    }
}
/**
Get Set Width

- parameter width: CGFloat
by DaRk-_-D0G
*/
var width:CGFloat {
    get {
        return self.frame.size.width
    }
    set {
        self.frame.size.width = newValue
    }
}

使用(UIViewの継承)

inheritsOfUIView.height = 100
button.height = 100
print(view.height)
19
YannSteph

プログレスバーのようなものについては、Swift 4

次の手順に従います。

  1. UIViewアウトレットを作成します:@IBOutlet var progressBar: UIView!
  2. 次に、ユーザーアクションvar progressBarWidth: Int = your valueの後に幅の値を増やすプロパティ
  3. その後、進捗状況の増減についてprogressBar.frame.size.width = CGFloat(progressBarWidth)
  4. そして最後に、IBACtionメソッドにprogressBarWidth += your valueを追加して、ユーザーがボタンに触れるたびに幅を自動的に増やします。
1

Interface Builderでこれを行うことができます。

1)フレームビュー(例:questionFrame)からメインビューにControlキーを押しながらドラッグし、ポップアップで[等しい高さ]を選択します。

2)次に、フレームのサイズインスペクターに移動し、[スーパービューと等しい高さ]制約の編集をクリックして、乗数を0.7に設定し、リターンを押します。

拘束が「等しい高さ...」から「比例した高さ...」に変更されていることがわかります。

1
Denys Triasunov

questionFrame.frame.size.height= screenSize.height * 0.30を割り当てても、ビューには何も反映されません。これは取得専用のプロパティだからです。 questionFrameのフレームを変更する場合は、以下のコードを使用できます。

questionFrame.frame = CGRect(x: 0, y: 0, width: 0, height: screenSize.height * 0.70)
1