2016-08-08 115 views
0

我已經子類化一個UIView並在其中創建了幾個視圖。我想在我的視圖控制器的視圖中創建這個視圖的一個實例,還有另一個自定義視圖將放置在視圖下方。我不知道如何將第二個視圖放在我的第一個視圖下方。調整一個超級視圖,使其大小等於其子視圖的大小

當我調試幀時,我得到{{0,0},{0,0}}。我正在使用砌體進行視圖佈局。我已經嘗試了幾種解決方案this thread

我創建了一個示例項目,其中包含我嘗試過的實際代碼。 https://github.com/anuj-rajput/ViewSample

在此示例項目中,有的UIViewPhoneVerificationTopViewPhoneVerificationPhoneNumberView 2子類,並且從創建這兩個視圖中的對象的視圖控制器PhoneVerificationViewController。我需要以完全垂直排列的方式完美排列它們(PhoneNumberView以下,TopView)。

我做錯了什麼?有沒有正確的方式來繼承UIView,然後在控制器中引用它?

這是視圖應該怎麼看起來像

Screenshot

+0

您的項目不編譯我。你使用的是什麼cocoapod版本?另外,你有沒有考慮使用UIStackView?它似乎非常適合這種情況 – MCMatan

+0

@MCMatan CocoaPods版本是1.0.1。我曾嘗試考慮UIStackView,但它僅在iOS 9中可用,並且我的項目需要向下兼容至iOS 8 :( –

回答

1

當您使用自動版式,和你想父視圖根據I'ts子類調整,它需要知道的內容有多大是。

最頂端的視圖必須對父視圖的頂部有一個約束。 而最底部的視圖必須對父視圖的底部有一個約束。

目前您的意見是嚴重不包含那裏的子類。

如果你會嘗試,例如設置「topView」的背景顏色爲紅色, 你會注意到,它不會改變我的顏色。這是因爲我的尺寸是0. 我不包裝我的內容。 如果你將「clipToBound」設置爲YES,你也不會看到它的子類。

爲了解決這個問題,加入了一種自下而上的約束,從底部視圖父視圖:

[self.subtitleTextLabel mas_makeConstraints:^(MASConstraintMaker *make) { 
      make.centerX.equalTo(self.titleTextLabel); 
      make.width.equalTo(self.mas_width).multipliedBy(0.7); 
      make.top.equalTo(self.titleTextLabel.mas_bottom).with.offset(10.f); 
      make.bottom.equalTo(self.mas_bottom); //This line is added 
     }]; 


[self.sendButton mas_makeConstraints:^(MASConstraintMaker *make) { 
      make.centerX.equalTo(self); 
      make.width.equalTo(self).multipliedBy(0.4); 
      make.height.equalTo(@40); 
      make.top.equalTo(self.phoneNumberTextView.mas_bottom).with.offset(30.f); 
      make.bottom.equalTo(self.mas_bottom); // This line is added 
     }]; 
+0

這似乎工作正常,我需要了解此約束對視圖的作用是什麼? –

+1

這說明(例如,make.width.equalTo(self.mas_width).multipliedBy(0.7))和頂部(make.top.equalTo(self);)但是你沒有一個限制引用底部,所以它不知道我的身高 – MCMatan

+0

啊。明白了!謝謝先生 –

相關問題