- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 iOS 编程的新手,可能不了解 View 层次结构,因此我无法在我创建的自定义表格单元格类中成功获取两个标签以正确调整大小。即 "translatesAutoresizingMaskIntoConstraints"
属性让我有点困惑。
我没有为这部分代码使用 Storyboard:我有一个 TableViewController,我在 viewDidLoad
中创建了自己的 tableView
。在 cellForRowAtIndexPath
中,我初始化了自己的 TableViewCell
实现。
我遇到的问题是,当我将 TableView 和我创建的 UILabel 的 "setTranslatesAutoresizingMaskIntoConstraints"
设置为 NO
然后添加约束时,我得到了以下错误:
"Terminating app due to uncaught exception `'NSInternalInconsistencyException',` reason: 'Auto Layout still required after executing `-layoutSubviews`. UITableView's implementation of `-layoutSubviews` needs to call super.'"
如果我注释掉 setTranslatesAutoresizingMaskIntoConstraints
行,我的应用程序会运行,但我会收到以下有关约束的警告:
"Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing
NSAutoresizingMaskLayoutConstraints
that you don't understand, refer to the documentation for theUIView
propertytranslatesAutoresizingMaskIntoConstraints
)"
基本上我想做的是在此处输入代码,让两个标签相互齐平,并根据方向/设备调整它们的大小(我将在它们上设置背景颜色,因此希望它们看起来“连续” )
任何人都可以帮助我并解释我所缺少的吗?提前致谢。
我添加标签的代码是:
self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200.0f, 30.0f)];
self.nameLabel.textColor = [UIColor redColor];
self.nameLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:12.0f];
self.nameLabel.backgroundColor = [UIColor brownColor];
[self.nameLabel setText:@"Test"];
// [self.nameLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.contentView addSubview:self.nameLabel];
...
NSDictionary *viewsDictionary =
NSDictionaryOfVariableBindings(nameLabel, summaryLabel);
NSArray *constraints =
[NSLayoutConstraint constraintsWithVisualFormat:@"|-[nameLabel][summaryLabel]-|"
options:0
metrics:nil
views:viewsDictionary];
最佳答案
I'm fairly new to ios programming and probably don't understand the view hierarchy as well as I should and thus am failing to successfully get two labels within a custom table cell class I have created to autoresize properly. Namely the "setTranslatesAutoresizingMaskIntoConstraints" property has me a little confused.
嗯,translatesAutoresizingMaskIntoConstraints
是 Apple 创建的用于从 Autoresizing (Spring and Struts)
过渡的属性至 Autolayout
更轻松。说,你有一些 AutoresizingMasks
为了您的观点,您刚刚切换了Autolayout
在不设置任何约束的情况下打开。然后你现有的 AutoresizingMasks
将转换为约束,将 View 固定在适当的位置。所以,默认情况下 translatesAutoresizingMaskIntoConstraints
属性设置为 YES。但是,当您开始添加约束时,在 90% 的情况下,它们将与通过转换 AutoresizingMasks
创建的约束发生冲突。 .所以,最好通过设置 view.translatesAutoresizingMaskIntoConstraints = NO
来关闭它。
在您的代码中,以下问题可能是造成问题的原因:
Frame
的设置您不应该为要添加约束的对象设置框架。这是一种范式转变。当您以自动布局方式思考时,框架只是设置正确约束的结果,这些约束共同决定了相关 View 的框架。所以,请删除框架设置。
self.nameLabel = [[UILabel alloc] init];
就足够了。
您的代码:
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(nameLabel, summaryLabel);
NSArray *constraints =
[NSLayoutConstraint constraintsWithVisualFormat:@"|-[nameLabel][summaryLabel]-|"
options:0
metrics:nil
views:viewsDictionary];
名称标签
nameLabel
应水平(因为您没有提到 H: 或 V:)与容器间隔“标准”距离 (20px),与 summaryLabel
相邻.但是它的 Y 位置和宽度和高度呢?所以我们需要更多的约束。summaryLabel
summaryLabel
.所以,让我们正确定义它们:
NSDictionary *viewsDictionary =
NSDictionaryOfVariableBindings(nameLabel, summaryLabel);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[nameLabel(100)][summaryLabel]-|" options:0 metrics:nil views:viewsDictionary];
NSArray *constraints1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[nameLabel(30)]" options:0 metrics:nil views:viewsDictionary];
NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[summaryLabel]" options:0 metrics:nil views:viewsDictionary];
NSArray *constraints3 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[nameLabel(==summaryLabel)]" options:0 metrics:nil views:viewsDictionary];
[self.view addConstraints:constraints];
[self.view addConstraints:constraints1];
[self.view addConstraints:constraints2];
[self.view addConstraints:constraints3];
现在您的 View 看起来不错。
在任何时候,要检查您的 View 是否缺少任何约束,请暂停调试器并在控制台中键入以下内容
po [[UIWindow keyWindow] _autolayoutTrace]
它将显示您的哪些观点有 AMBIGUOUS LAYOUT
此外,请记住在 Storyboard/IB 中,如果约束显示为“橙色”颜色,则您需要更多约束来定义对象位置。添加所有必要的约束后,约束颜色变为“蓝色”
关于ios - 在 UITableViewCell 中自动布局两个标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20485354/
我想做的是,如果鼠标位于“下一个”按钮上,它会以慢速向右滚动,如果鼠标没有位于“下一个”按钮上,它会停止滚动? 这是我的尝试http://jsfiddle.net/mdanz/nCCRy/14/ $(
StyleCop 是一个很棒的视觉工作室小插件。但它不会向您显示实时提示或提供任何自动修复。 随之而来的是 reSharper 和 StyleCop for reSharper,这是理想的解决方案,但
我为我的MatchQuery使用了模糊性选项,但是我想将模糊性值设置为auto。有什么办法吗? 另外,对于完成建议程序,您可以将其设置为支持unicode,对于我的MatchQuery,有什么方法可以
我想从表中获取一行[字符串名称,字符串密码,int 某些内容]并将其映射到一个 User 对象,该对象具有 3 个属性,如上面的 getter 和 setter有什么方法可以自动完成吗?我考虑过反射,
我有一个像这样的方法:void m1(string str) 并且有一个像这样的类: public class MyClass { public bool b1 { set; get; }
我正在尝试使用 $rootScope 从一个 Controller 向另一个 Controller $broadcast 一些数据。 如果我使用像 ng-click 这样的触发器来运行将广播的功能,它
我考虑了很多关于是要使用完全自动化的缓存还是手动缓存。 我们的自动方法是一种解决方案,它可以挖掘数据库、查询和格式化每个潜在和 future 的数据请求,并将其保存到适当的缓存存储(内存缓存或基于磁盘
我的 CSS 必须使用过渡来更改,直到现在我都使用 div:hover 来实现。 当您单击另一个 div 时需要激活过渡,而不是当您将鼠标悬停在必须移动/更改的 div 上时。 我该怎么做? 谢谢 永
在我的应用程序中,我需要一些动画,但如果它已经设置了动画,则不需要持续时间。但我的问题是它会自动添加持续时间。 在这里你可以看到 2 个函数,第二个没有持续时间但它确实有持续时间(可能从 1 秒开始)
两年前,我需要制作一个工具,通过 POST 自动将 txt/csv 文件上传到我的 Web 服务器,然后使用 cronjob 通过 PHP 对其进行解析。 这有两次在每天午夜自动发生。尽管这行得通,但
请阅读下面程序中的评论: #include void test(char c[]) { c=c+2; //why does this work ? c--; printf("%
也许是个幼稚的问题,但是...... 确认或拒绝: 自动和静态存储持续时间的对象/变量的内存的存在是在编译时确定的,程序运行时失败的可能性绝对为零,因为没有足够的内存用于自动对象。 自然地,当自动对象
有没有什么方法可以自动获得类中属性更改的通知,而不必在每个 setter 中都编写 OnPropertyChanged? (我有数百个属性,我想知道它们是否已更改)。 安东建议 dynamic pro
我们在使用 Azure DevOps 的项目中采用了 gitflow 流程。我有以下场景: 当功能分支合并到 Develop 时,我想在完成拉取请求的同时执行压缩合并策略 当 Release 分支定期
我的网站上有一个评论部分,我将 html 编码的评论保存在我的数据库中。所以我添加了这条评论- "testing" `quotes` \and backslashes\ and html 并将其保存在
是否存在“ checkin 前 TFS 自动 checkout ”这样的功能,以便在我说“ checkin ”之前我不会 checkout 任何文件,例如以防我只是临时更改文件 - 这一直发生。 换句
我有一个运行在 Linux/Apache/Tomcat 堆栈上的网站,它需要每隔几个月自动脱机以进行服务器维护,这将持续任意时间。有哪些选项可以让 Apache 建立和取消“服务器维护”页面? 我需要
我经常在工作中创建文档,在公司内部,由于我们使用的首字母缩写词和缩写词的数量,我们几乎拥有自己的语言。因此,我厌倦了在发布文档之前手动创建首字母缩写词和缩写表,并且快速的谷歌搜索发现了一个可以有效地为
我希望在用户或宏将计算模式从自动更改为手动或手动更改为自动时运行代码。是否有为此触发的事件? (属性是 Application.Calculation 在 Excel 互操作中。) 使用 Excel
这个问题在这里已经有了答案: Repeat command automatically in Linux (13 个回答) 6年前关闭。 我想创建一个脚本来获取另一个文件夹中的所有文件夹名称。并为这些
我是一名优秀的程序员,十分优秀!