IOS UIImageView 有类似 Android WRAP_CONTENT 的内容
IOS UIImageView has something like Android WRAP_CONTENT
这是我的代码
m_containerbackground = [UIView new];
m_containerbackground.backgroundColor = [AppleColor clearColor];
[m_containerbackground setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:m_containerbackground];
[m_containerbackground.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = YES;
[m_containerbackground.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = YES;
[m_containerbackground.widthAnchor constraintEqualToConstant:width/pointScale].active = YES;
[m_containerbackground.heightAnchor constraintEqualToConstant:height/pointScale].active = YES;
m_container = [UIView new];
[m_container setTranslatesAutoresizingMaskIntoConstraints:NO];
[m_containerbackground addSubview:m_container];
[m_container.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = YES;
[m_container.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = YES;
[m_container.widthAnchor constraintEqualToAnchor:m_containerbackground.widthAnchor].active = YES;
[m_container.heightAnchor constraintEqualToAnchor:m_containerbackground.heightAnchor].active = YES;
m_image = [AppleImageView new];
[m_image setTranslatesAutoresizingMaskIntoConstraints:NO];
m_image.image = m_srcImage;
m_image.contentMode = UIViewContentModeScaleAspectFit;
[m_container addSubview:m_image];
[m_image.topAnchor constraintEqualToAnchor:m_container.topAnchor constant:topm].active = YES;
[m_image.leadingAnchor constraintEqualToAnchor:m_container.leadingAnchor constant:leftm].active = YES;
[m_image.trailingAnchor constraintEqualToAnchor:m_container.trailingAnchor constant:-rightm].active = YES;
[m_image sizeToFit];
如上面的代码所示,我可以控制 m_image 的宽度并设置 UIViewContentModeScaleAspectFit
,这是因为我想要 m_srcImage
的宽度缩放到与 m_image
相同的宽度和 m_srcImage
的高度以缩放到原始纵横比。然后我想让 m_image
的高度与缩放后的 m_srcImage
的高度相同,我该怎么做?
下面是我的 Android 代码,它在 Android 下工作,因为 Android 有 WRAP_CONTENT 而 IOS heightAnchor constraintEqualToConstant
只能设置具体数值...
m_image = new ImageView(m_activity);
m_image.setId(m_image.hashCode());
m_image.setImageBitmap(m_srcImage);
m_image.setScaleType(ImageView.ScaleType.FIT_START);
m_image.setAdjustViewBounds(true);
m_container.addView(m_image);
{
ConstraintSet set = new ConstraintSet();
set.clone(m_container);
set.constrainHeight(m_image.getId(), ConstraintSet.WRAP_CONTENT);
set.constrainWidth(m_image.getId(), ConstraintSet.MATCH_CONSTRAINT);
set.connect(m_image.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP,topm);
set.connect(m_image.getId(), ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT,rightm);
set.connect(m_image.getId(), ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT,leftm);
set.applyTo(m_container);
}
这里,你需要这样计算图片的高度:
CGFloat imgWidth = width / pointScale;
CGFloat imgHeightExpect = m_srcImage.size.height * imgWidth/ m_srcImage.size.width;
if (m_srcImage.size.width > imgWidth) {
[m_image.heightAnchor constraintEqualToConstant:imgHeightExpect].active = YES;
} else {
[m_image.heightAnchor constraintEqualToConstant:imgHeightExpect].active = NO;
}
您只需将该代码添加到您的代码下方即可。
或者您可以在此link参考其他解决方案:
这是我的代码
m_containerbackground = [UIView new];
m_containerbackground.backgroundColor = [AppleColor clearColor];
[m_containerbackground setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:m_containerbackground];
[m_containerbackground.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = YES;
[m_containerbackground.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = YES;
[m_containerbackground.widthAnchor constraintEqualToConstant:width/pointScale].active = YES;
[m_containerbackground.heightAnchor constraintEqualToConstant:height/pointScale].active = YES;
m_container = [UIView new];
[m_container setTranslatesAutoresizingMaskIntoConstraints:NO];
[m_containerbackground addSubview:m_container];
[m_container.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = YES;
[m_container.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = YES;
[m_container.widthAnchor constraintEqualToAnchor:m_containerbackground.widthAnchor].active = YES;
[m_container.heightAnchor constraintEqualToAnchor:m_containerbackground.heightAnchor].active = YES;
m_image = [AppleImageView new];
[m_image setTranslatesAutoresizingMaskIntoConstraints:NO];
m_image.image = m_srcImage;
m_image.contentMode = UIViewContentModeScaleAspectFit;
[m_container addSubview:m_image];
[m_image.topAnchor constraintEqualToAnchor:m_container.topAnchor constant:topm].active = YES;
[m_image.leadingAnchor constraintEqualToAnchor:m_container.leadingAnchor constant:leftm].active = YES;
[m_image.trailingAnchor constraintEqualToAnchor:m_container.trailingAnchor constant:-rightm].active = YES;
[m_image sizeToFit];
如上面的代码所示,我可以控制 m_image 的宽度并设置 UIViewContentModeScaleAspectFit
,这是因为我想要 m_srcImage
的宽度缩放到与 m_image
相同的宽度和 m_srcImage
的高度以缩放到原始纵横比。然后我想让 m_image
的高度与缩放后的 m_srcImage
的高度相同,我该怎么做?
下面是我的 Android 代码,它在 Android 下工作,因为 Android 有 WRAP_CONTENT 而 IOS heightAnchor constraintEqualToConstant
只能设置具体数值...
m_image = new ImageView(m_activity);
m_image.setId(m_image.hashCode());
m_image.setImageBitmap(m_srcImage);
m_image.setScaleType(ImageView.ScaleType.FIT_START);
m_image.setAdjustViewBounds(true);
m_container.addView(m_image);
{
ConstraintSet set = new ConstraintSet();
set.clone(m_container);
set.constrainHeight(m_image.getId(), ConstraintSet.WRAP_CONTENT);
set.constrainWidth(m_image.getId(), ConstraintSet.MATCH_CONSTRAINT);
set.connect(m_image.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP,topm);
set.connect(m_image.getId(), ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT,rightm);
set.connect(m_image.getId(), ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT,leftm);
set.applyTo(m_container);
}
这里,你需要这样计算图片的高度:
CGFloat imgWidth = width / pointScale;
CGFloat imgHeightExpect = m_srcImage.size.height * imgWidth/ m_srcImage.size.width;
if (m_srcImage.size.width > imgWidth) {
[m_image.heightAnchor constraintEqualToConstant:imgHeightExpect].active = YES;
} else {
[m_image.heightAnchor constraintEqualToConstant:imgHeightExpect].active = NO;
}
您只需将该代码添加到您的代码下方即可。
或者您可以在此link参考其他解决方案: