Masonryを使用してscrollViewにコンストレイントを設定する
3121 ワード
次の3つのコントロールが必要です.
怠惰なロードまたはその他の方法で3つのコントロールを作成します.まずscrollViewを作成し、コントローラviewに追加します. containerViewを作成してscrollViewに追加します.scrollViewのコンテナビューとして、scrollViewのスクロール範囲をコンストレイントで設定するための です.追加するレイヤー(例えばimage_View)をcontainerViewに追加し、ビューの高さや幅が画面より大きい場合は をスクロールできます.
3つのサブコントロールを作成
3つのサブコントロールにコンストレイントを設定する
XIBまたはstoryboardでscrollViewの制約を設定する
scrollView水平スクロール制約1.コントローラにscrollViewコントロールを追加し、まずscrollViewの拘束を上下左右の間隔0,2に設定.サブコントロールをscrollViewに追加する前に、scrollViewのコンテナビューとしてUIViewを追加し、scrollViewのスクロール範囲を決定します.親コントロールscrollViewに対するコンテナビューの上下左右のコンストレイントの間隔を0に設定.水平スクロールが必要な場合は、コンテナビューの高さと幅の制約を設定します.高さはscrollViewの高さと同じで、幅はスクロールの範囲によって決まりますが、幅と高さは固定する必要があります.
scrollView垂直スクロールコンストレイントは、まずコンテナビューを追加し、コンストレイントを設定する必要があります.垂直スクロールが必要な場合は、コンテナビューの高さと幅のコンストレイントを設定します.幅はscrollViewの幅と同じで、高さはスクロールの範囲によって決まります.ビューの高さが画面より大きい場合はスクロールできます.注:scrollViewに必要なコントロールをコンテナビューに追加すればよい
@property (nonatomic, weak) UIScrollView *scrollView;
@property (nonatomic, weak) UIImageView *image_View;
@property (nonatomic, weak) UIView *containerView;
怠惰なロードまたはその他の方法で3つのコントロールを作成します.
3つのサブコントロールを作成
- (UIView *)containerView {
if (_containerView == nil) {
UIView *containerView = [UIView new];
[self.scrollView addSubview:containerView];
_containerView = containerView;
}
return _containerView;
}
- (UIScrollView *)scrollView {
if (_scrollView == nil) {
UIScrollView *scrollView = [UIScrollView new];
[self.contentView addSubview:scrollView];
_scrollView = scrollView;
}
return _scrollView;
}
- (UIImageView *)image_View {
if (_image_View == nil) {
UIImageView *imageView = [UIImageView new];
[self.containerView addSubview:imageView];
_image_View = imageView;
}
return _image_View;
}
3つのサブコントロールにコンストレイントを設定する
// scrollView
[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
// scrollView
[self.containerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.scrollView);
make.width.mas_equalTo(self.scrollView);
}];
// 1.
UIImage *image = [[SDWebImageManager sharedManager].imageCache imageFromDiskCacheForKey:picURL.absoluteString];
// 2. ,
CGFloat width = kScreenW;
CGFloat height = width / image.size.width * image.size.height;
// imageView
[self.image_View mas_remakeConstraints:^(MASConstraintMaker *make) {
if (height > kScreenH) { // ,
make.top.mas_equalTo(self.containerView);
} else { // ,
make.top.mas_equalTo((kScreenH - height) * 0.5);
}
make.left.right.mas_equalTo(self.containerView);
make.height.mas_equalTo(height);
}];
// scrollView ,
[self.containerView mas_makeConstraints:^(MASConstraintMaker *make) {
// , scrollView
make.bottom.mas_equalTo(self.image_View);
}];
//
[self.image_View sd_setImageWithURL:[self getBigImageURL:picURL] placeholderImage:[UIImage imageNamed:@"avatar_default_big"]];
XIBまたはstoryboardでscrollViewの制約を設定する
scrollView水平スクロール制約1.コントローラにscrollViewコントロールを追加し、まずscrollViewの拘束を上下左右の間隔0,2に設定.サブコントロールをscrollViewに追加する前に、scrollViewのコンテナビューとしてUIViewを追加し、scrollViewのスクロール範囲を決定します.親コントロールscrollViewに対するコンテナビューの上下左右のコンストレイントの間隔を0に設定.水平スクロールが必要な場合は、コンテナビューの高さと幅の制約を設定します.高さはscrollViewの高さと同じで、幅はスクロールの範囲によって決まりますが、幅と高さは固定する必要があります.
scrollView垂直スクロールコンストレイントは、まずコンテナビューを追加し、コンストレイントを設定する必要があります.垂直スクロールが必要な場合は、コンテナビューの高さと幅のコンストレイントを設定します.幅はscrollViewの幅と同じで、高さはスクロールの範囲によって決まります.ビューの高さが画面より大きい場合はスクロールできます.注:scrollViewに必要なコントロールをコンテナビューに追加すればよい