2016-07-26 12 views
0

私はこの問題を一日中苦労しており、本当に助けが必要です。私がしようとしているのは、そのフレームがサブビューに基づいて調整するビューを作成することです。特定のビジネスルールに基づいて、サブビューを追加および削除する必要があります。ここではいくつかのサンプルコードは次のとおりです。サブビューに基づいてUIViewsフレームを調整する方法

-(void)createLinkedAccountDetailsHeaderView { 
    CGRect frame = CGRectMake(0, 0, 600, 220); 
    CDPAccountDetailsView *accountDetailsView = [[CDPAccountDetailsView alloc ] initWithFrame:frame withViewModel:self.viewModel isInEditState:self.isInEditState]; 
    self.tableView.tableHeaderView = accountDetailsView; 
} 

- (instancetype)initWithFrame:(CGRect)frame withViewModel:(CDPDebitOrderDetailsReviewViewModel *)viewModel isInEditState:(BOOL) isInEditState { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.viewModel = viewModel; 
     self.isInEditState = isInEditState; 

     [self initialiseView]; 
     [self configureWithAccountsView]; 
    } 
    return self; 
} 

(void)initialiseView { 
    NSString *nibName = NSStringFromClass([self class]); 
    UINib *nib = [UINib nibWithNibName:nibName bundle:[SBResourcesBundle bundleWithName:[CDPResourceBundle bundleName]]]; 
    [nib instantiateWithOwner:self options:nil]; 
    [SBViewUtility addSubview:self.mainView withConstraintsToParentView:self]; 
    [self layoutIfNeeded]; 

    self.circleView.layer.cornerRadius = self.circleView.bounds.size.width /2; 

    //A lot of subview initialisation is done 

    [self layoutIfNeeded]; 
} 

は、どのように私はUIViewのは、サブビューをラップアラウンドし、そのサブビューに基づいてフレームを変更するために得ることができますか?現在のところ、サブビューに関係なく常に固定フレームを使用しているため。

+0

ターゲットが> ios 9スタックビューの場合は最適です。 –

+0

残念ながら私はiosをターゲットにしなければなりません8 – user481610

+0

これは役立つかもしれませんhttp://stackoverflow.com/questions/19170053/resize-superview-after-subviews-change-dynamically-using-autolayout –

答えて

0

制約を確認して、ビューの上下左右に拘束されていることを確認してから、サイズに合わせて、hereのようにします。

0

何かの.frameを変更することについて強くお勧めします。ほとんどの場合、制約を変更するのが最善の方法です。

あなたの質問が正しく理解されていれば、その内容に応じてビューの拡大/縮小が必要になります。それがあれば、それはかなり些細でなければならない。

  • ビュー=あなたはサイズを変更しようとしているビューを:私が使用している命名について

    注意。

  • サブビュー=あなたは

ステップ1サイズを変更しようとしているその特定のビューに含まれるサブビュー:あなたのビューが配置されますが、「サイズ設定」ではないしなければならない

を。つまり、「等しい幅」や「上部の&ボトム」のように、ビューとそのスーパービューの間に制約があってはならないということです。 X & Yの位置に置くだけです。たとえば、トップ・トップの制約&の左詰めの制約、または中心のX & Yのようなものです。これは、達成しようとしているものによって異なります。

これらの制約のみを追加すると、「ビューに十分なcsontraintsがなく、幅/高さを計算できません」というエラーが表示されます。これは、まだ2段階に入っていないからです。

ステップ2:

私たちがやっていることは、サブビューの制約を持つビューの高さ&幅を定義しています。どちらかをハードコードすることができます(私は通常これに対して助言します)、またはそれらのサブビューを側面に制約します。古典的な4面の拘束建物、左から左、上から上、下から下、右から右へのリンク。マージンの有無にかかわらず、それは無関係です。

有効なビュー+サブビュー制約のビルドは、(.xibs/.storyboardを使用している場合は)黄色の警告が表示されます。解決した場合はビューが縮小されますサイズ0/0。あなたの現在の.xibには何も含まれていないからです。テストのためだけにラベルを追加したい場合は、サイズ変更のための別の黄色の警告が表示され、それを解決すると、そのラベルに従ってビューのサイズが変更されます。

サブビューの内側には、かなり多くのものが必要に応じてビューのサイズを変更します。

コンテンツが動的に生成されても、サイズ0,0のビューを表示しない場合は、Heightの制約を追加して値をハードコードし、[ビルド時に削除]チェックボックスをオンにすることができます。この制約は、.xibが視覚的に正しいか、現実に近いかをフローの妨げにならずに助けます。

ステップ1:

だから、要約し、ビューを配置し、それに大きさを与えていない、エラーを無視してください。

ステップ2:利益:サブビューに制約を与え、コンテンツを内部

ステップ3から縮小/成長 にビューを強制します。

関連する問題