- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请看下面我的回答,我有一个可行的解决方案
我已经完全重写了代码,使它更小更整洁,并获得相同的结果。
更新:当加载大图像时,似乎正在调整 UIImageView 的固有内容大小,这会抛出其布局并使其成为设备窗口和 ScrollView 宽度的两倍。我需要弄清楚如何解决这个问题。下面的代码做了一个小改动,减少了 UIImageView 的宽度,但不允许我将它设置为窗口宽度的 100%。
[captionImageView setContentCompressionResistancePriority:1 forAxis:UILayoutConstraintAxisHorizontal];
我为我的 View 设置了以下内容,我的问题是 UIImageView 中的图像将其包含 View 的宽度推到比设备窗口更宽。
我有一个 ViewController,它在 for 循环中加载和添加 subview ,一切似乎都工作正常。
在这些 subview 中,我尝试使用自动布局来实现以下目的:
添加一个UIImageView并使其与父窗口宽度相同
将 UIImage 加载到其中,并使用 UIViewContentModeScaleAspectFill 确保图像加载良好且成比例。
我在可视化格式化语言中使用约束来尝试将 UIImage View 的大小设置为父 View 的宽度,我希望它是设备窗口宽度。
如果我按如下方式指定约束:
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[captionImageView(320)]|" options:0 metrics:metrics views:views]];
然后它工作正常,但这不是理想的解决方案,因为我希望 UIImageView 与设备的宽度齐平,并且设置固定宽度是不好的做法
如果我像这样指定约束:
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[captionImageView]|" options:0 metrics:metrics views:views]];
然后 UIImage 的大小假设为 960px 将强制父容器 View 也为该大小。
我将自定义 View 内容加载到 ScrollView 中,因此我们有水平滚动,这很糟糕。
请注意,我使用 UIView 类别指定 view.translatesAutoresizingMaskIntoConstraints 设置为 NO。
#import "UIView+Autolayout.h"
@implementation UIView (Autolayout)
+(id)autoLayoutView {
UIView *view = [self new];
view.translatesAutoresizingMaskIntoConstraints = NO;
return view;
}
@end
自定义 View 的代码如下。关于如何确保 UIImageView 的大小不会超出设备窗口的边界,有什么想法吗?
//
// FigCaptionView.m
//
//
// Created by Matthew Finucane on 18/12/2014.
// Copyright (c) 2014 The App. All rights reserved.
//
#import "FigCaptionView.h"
#import "UIView+Autolayout.h"
@interface FigCaptionView(){}
@end
@implementation FigCaptionView
-(id)initWithData:(NSDictionary *)viewData {
if((self = [FigCaptionView autoLayoutView])) {
self.figCaptionData = viewData;
}
return self;
}
-(void)layoutItems {
[self setBackgroundColor:[UIColor redColor]];
/**
* The container view for everything
*/
UIView *containerView = [UIView autoLayoutView];
/**
* Setting up the caption image
*/
UIImageView *captionImageView = [UIImageView autoLayoutView];
[captionImageView setContentMode:UIViewContentModeScaleAspectFill];
/**
* Grabbing the image (not yet the right way to do this)
*/
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://placekitten.com/960/240"] options:0 error:nil]];
dispatch_async(dispatch_get_main_queue(), ^{
captionImageView.image = image;
});
});
/**
* Setting up the caption image
*/
UITextView *captionTextView = [UITextView autoLayoutView];
[captionTextView setText:@"Sample paragraph text will go in here. Sample paragraph text will go in here. Sample paragraph text will go in here. Sample paragraph text will go in here. Sample paragraph text will go in here.Sample paragraph text will go in here"];
/**
* Adding the container view
*/
[self addSubview:containerView];
[containerView addSubview:captionImageView];
[containerView addSubview:captionTextView];
[captionTextView setBackgroundColor:[UIColor blueColor]];
/**
* Dictionaries for autolayout: views and metrics
*/
NSDictionary *views = NSDictionaryOfVariableBindings(containerView, captionImageView, captionTextView);
NSDictionary *metrics = @{@"imageHeight": @"160.0", @"margin": @"20.0"};
/**
* Setting up the constraints for this view
*/
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[containerView]|" options:0 metrics:metrics views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[containerView]|" options:0 metrics:metrics views:views]];
/**
* Container view constraints
*
* The first constraint is the one that might be causing me trouble.
*/
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[captionImageView]|" options:0 metrics:metrics views:views]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[captionTextView]|" options:0 metrics:metrics views:views]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[captionImageView(imageHeight)][captionTextView]|" options:NSLayoutFormatAlignAllLeft metrics:metrics views:views]];
for(UIView *view in self.subviews) {
if([view hasAmbiguousLayout]) {
NSLog(@"OOPS");
NSLog(@"<%@:0x%0x>", view.description, (int)self);
}
}
}
@end
最佳答案
你可以这样处理。
假设ViewA
的宽度等于设备窗口的宽度。在这种情况下,您可以只添加一个UIView
。并使用约束设置它,就像您在上面处理的通常 View 一样。
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[captionImageView(ViewA)]|" options:0 metrics:metrics views:views]];
希望这对您有所帮助。
编辑:
因为我不太确定它是否会以您对我的评论方式起作用。所以我只是展示了我如何处理的代码。
1.设置viewA
_viewA = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
2.就像你的 UIImageView 一样处理它(在本例中,captionImageView)
[self.view addSubView:_viewA];
[_viewA setTranslatesAutoresizingMaskIntoConstraints:NO];
3.加入NSDictionaryBinding
NSDictionary *dictionary = NSDictionaryOfVariableBindings(_textView, _button, _viewA);
4.自定义VFL并赋值。
NSString *const KButtonHorizontal = @"|[_button(_viewA)]|";
关于iOS7 Autolayout 和 UIImageview 过大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27761395/
在 iOS Autolayout 中,我应该添加什么约束来设置与 Superview(在我的例子中是 UIViewController 的 View )成比例的宽度和高度,使用 Autoresizin
我有一个主屏幕,三个按钮垂直对齐。我想在 4"屏幕上采用我的应用程序。所以我想平均调整按钮之间的空间以填满屏幕。看下面的图片:我怎样才能使用 AutoLayout 完成它? 绿色区域保持其大小。 最佳
我在窗口中有一个 View , View 的位置和大小是通过自动布局计算的。该 View 有一个 subview ,一个可拖动的 NSView 子类。通过覆盖 -mouseDown: 和 -mouse
在 Interface builder 中,size classes 的强大功能让您可以安装或卸载约束。在代码中,您可以通过切换 active 属性来做类似的事情。 Interface Builder
我一直在开发具有相当复杂的包含 View Controller 层次结构的企业 iPad 客户端应用程序。我最近不得不在应用程序启动 View (服务器登录 View )中重新设计。我决定借此机会使用
环境: iOS 6/7、Xcode 5 中的自动布局。 我知道要调整 NavBar 以适应状态栏,我将 NavBar 的背景图像设置为 64 位高(引用:WWDC 2013 Video Lecture
我正在尝试创建一个包含一些垂直放置的按钮的 View ,并且我希望在调整窗口大小时按钮之间的间距相等。该 View 的约束(使用视觉格式)是: H:|-0-[button1]-0-| H:|-0-[b
最近在 Xcode 5 中切换到自动布局(并且观看了 WWDC 13 的开发人员视频),我发现除了基于 View 的 NSOutlineView 之外,其他东西都可以很好地工作。 在自动布局之前,这是
这个问题已经有答案了: Seeing black bars at the top and bottom of the iPhone X Simulator (11 个回答) 已关闭 6 年前。 今天,
对于iPhone 6+的风景和肖像,我有不同的尺寸等级。如果我从横向或纵向开始运行,则不会出现任何约束错误。当我从横向或纵向切换时,会遇到约束错误。看来,如果我切换,则会同时获得纵向和横向尺寸类别约束
我遇到了 AutoLayout 的问题,这让我非常头疼。我使用 Autolayout 在 .xib 中设置了 ScrollView 和容器 View 。我需要动态地将 subview 添加到容器 Vi
我正在构建一个通用的工作流客户端应用程序,它应该使用来自多个源的工作流任务,甚至可以在理想情况下稍后添加,而无需更改应用程序代码。这个想法是应用程序将适应数据结构、类型、UI 和操作元素,理想情况下还
我得到了通常的 Unable to simultaneously satisfy constraints. Probably at least one of the constraints in th
我有以下代码,当我的应用程序出现问题时,会显示包含不同消息的警报。该代码多年来一直运行良好,并且存在于我在 App Store 上的大多数应用程序中。 我正在制作一个新应用程序,只是添加了此代码,但是
我在 UIStoryboard 中添加一个 UIView 并将其绑定(bind)到一个名为 testView 的自定义 UIView 类,接下来,我创建一个 UIView 在 require init
该应用程序允许用户发布图像/关注其他人等。 所以它工作正常,但我收到以下警告:(我知道有些与自动布局约束有关,但我如何知道哪个导致了问题?) 2015-07-05 17:19:37.701 Pixym
假设我有一个包含两列对象的 View 。第一列包含标签,第二列包含 slider 。我希望 slider 全部向左对齐。我希望所有标签都相互对齐。诀窍是,如何设置标签和 slider 之间的间距,以便
我有一个 View ,我在自动布局上设置了这个 View 。当我在 4s iphone 中更改按钮框架/位置时,我无法更改它。如何更改ios 4s中的按钮位置注意不更改自动版式属性? 这是我的代码:
我正在尝试为 iPad 和 iPhone 构建一个包含大约 10 个不同文本字段、开关和标签的表单。在这样做时,我想将 AutoLayout 与 UIScrollView 一起使用,以便它可以在 iP
我将尝试描述这个问题——以前从未见过这种行为。 当应用程序在模拟器或实际设备上启动时,我有一个按钮从应用程序屏幕的右侧移动到中间。我希望它始终位于中间(移动到的位置)。 基本上,它从父 View 上的
我是一名优秀的程序员,十分优秀!