我有点困惑于这个......任何帮助都非常感激.我已经花了很多时间调试这个.
我有UITableView数据源提供NSFetchedResultsController.在单独的视图控制器中,我使用新的记录向CoreData插入[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:],保存托管对象上下文并关闭该控制器.很标准的东西.
然后通过NSFetchedResultsController以下方式接收托管对象上下文中的更改:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
[self.tableView beginUpdates];
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.tableView endUpdates];
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
switch (type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationNone];
break;
case NSFetchedResultsChangeDelete:
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
break;
case NSFetchedResultsChangeUpdate:
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
break;
case NSFetchedResultsChangeMove:
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationNone];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是出现问题的地方 - 这需要太长时间(在iPhone 4上大约3-4秒).似乎花费时间计算细胞的布局.
我从单元格中删除了所有内容(包括自定义子类)并将其保留UILabel,但没有任何改变.然后我将单元格的样式更改为Basic(或除Custom之外的任何内容)并且问题消失了 - 即时添加新单元格.
我加倍检查,NSFetchedResultsControllerDelegate回调只被调用一次.如果我忽略它们并做 …
我正在开发一个ios应用程序.我以编程方式将自动布局添加到2个标签.
我需要添加一个约束来使它们的宽度相等.
我知道如何通过使用以下方法来修复标签的宽度:
constraint = [NSLayoutConstraint
constraintWithItem:myLabel
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem: nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0f
constant:200.0f];
Run Code Online (Sandbox Code Playgroud)
这会将标签大小固定为常数.但我有2个标签,我希望它们具有相同的大小而不必设置常量.
是否有任何标志可以抑制Xcode 5中故事板的不明确布局或错位视图.
我在代码中添加约束,我只是使用Interfacebuilder中的视图作为傻瓜.
我不想应用Xcode Resolve自动布局问题,因为我很高兴看到Interfacebuilder中的视图如何显示?
我有一个使用的应用程序,auto-layout当我在iOS 7设备上运行它时,一切仍然按预期工作,但是当我在iOS 8设备上运行时,我的一些约束有点古怪.
我实际上在另一个应用程序中遇到了类似的问题,但这不是一个大问题.现在,我开始怀疑它是否是iOS 8 SDK中的一个错误,或者是否有一种新的方法来处理iOS8中我不知道的自动布局.
这是我的设置:我有UIView一个UIImageView嵌入其中.视图和图像视图都有约束将其底部,前导和后沿固定到其超级视图,常量= 0.
该UIView也有其固定到它的父顶部边缘,我必须以编程方式调整它连接到约束一个IBOutlet.它UIImageView具有第四个约束,将其高度固定到设备的高度(在我的情况下为568).
以下是我在iOS 7中期望/实现的行为:我正在尝试缩小容器视图的高度,并导致图像视图的顶部在没有宽高比变化的情况下被切断(看起来像你裁剪的那种图像的顶部关闭)...这就是我固定图像视图和底部边缘的高度的原因.
在iOS8中实际发生的事情:容器视图按预期收缩(它保持固定在侧面和底部,高度收缩).该UIImageView行为就好像它曾与cosntant == 0,而不是切断图像的顶部的顶部空间限制,整个图像逐渐缩小.由于我在AspectFit模式下有图像,因此侧面也会捏合以保持纵横比相同(但是imageView本身仍保持固定在前导,后沿和下边缘).
我该怎么做:我有一个通知,从我的代码的另一部分触发,以调整连接到IBOutlet的顶部空间约束.它调用的方法非常简单:
- (void) setTopSpaceForContainerView:(NSNotification*) notif{
containerView_TopSpace.constant = [[notif.userInfo objectForKey:kTopSpace] intValue];
[self.view setNeedsUpdateConstraints];
[self.view setNeedsLayout];
}
Run Code Online (Sandbox Code Playgroud)
其他人有类似的经历吗?我正在尝试找到一种解决方法,但iOS 8似乎决心缩小我的图像.
万分感谢!
我有一个带约束的UITableViewCell,以便在iPhone 6和iPhone 6+上正确布局单元格.
单元格内容正确地正确调整大小.但是,我需要在其中一个视图上绘制一个子图层渐变.为了做到这一点,我正在使用awakeFromNib来绘制子层.
AwakeFromNib在自动调整之前给出了帧的大小,因此渐变子视图的大小不正确.
如果我使用layoutSubviews,第一次调用时,大小也是错误的,并且单元格需要在其大小合适之前滚动; 所以这个方法也行不通
我应该使用什么方法来获得正确的帧尺寸才能正确绘制?
我有一个包含自定义单元格的UITableViewController.每个单元格都是使用nib创建的,并包含一个不可滚动的UITextView.我在每个单元格中添加了约束,以便单元格将其高度调整为UITextView的内容.所以最初我的控制器看起来像这样:
现在我希望当用户在单元格中键入内容时,其内容会自动适应.这个问题已被多次询问,特别是这里或第二个答案.因此,我在代码中编写了以下代理:
- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text {
[self.tableView beginUpdates];
[self.tableView endUpdates];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
然而,它会导致以下奇怪的行为:忽略所有约束,并且所有单元格高度都会崩溃到最小值.见下图:
如果我向下滚动tableView以强制进行新的cellForRowAtIndexPath调用,我将恢复单元格的正确高度:
请注意,我并没有如我所料的autoLayout来照顾这实现heightForRowAtIndexPath.
有人能告诉我我做错了什么或帮助我吗?非常感谢你 !
我正在尝试使用 UIHostingController 将 SwiftUI 视图添加到 UIKit 视图,并且它显示额外的间距(此示例是为了模拟生产应用程序上的问题而制作的)。这是屏幕截图。

布局概览:
View
UIStackView
UIImageView
UIView(red)
UIHostingController
UIView(blue)
Run Code Online (Sandbox Code Playgroud)
问题: 快速 UI 视图 (UIHostingController) 显示在红色和蓝色视图之间,它在分隔线之后显示额外的间距。间距根据 SwiftUI 视图的大小而变化。
如果我减少行数(Hello World 文本)或减少间距,它似乎工作正常。
这是完整的源代码(https://www.sendspace.com/file/ux0xt7):
ViewController.swift(主视图)
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var mainStackView: UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
addView()
}
private func addView() {
mainStackView.spacing = 0
mainStackView.alignment = .fill
let imageView = UIImageView()
imageView.image = UIImage(named: "mountain")
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true …Run Code Online (Sandbox Code Playgroud) 我有一个UIButtons,一个在另一个的顶部,在superview中,其高度可以调整大小.两个按钮之间应有一个恒定的垂直间距,但顶部和底部间距应调整大小,以便在调整大小时两个按钮在superview中保持居中.
我尝试在每个按钮的superview的间距上创建两个小于或等于的约束(具有相同的优先级),以及按钮之间的恒定垂直间距,如下所示:

(之所以它在这里小于或等于是因为这个视图是在IB的4英寸屏幕的给定高度定义的,但是可以缩小为3.5英寸的屏幕.)但是,这不起作用,正如您在应用程序运行时从屏幕截图中看到的那样:

这几乎就像你想告诉AutoLayout这两个约束本身应该具有相等的值,即使它们都被设置为"小于或等于".有什么方法可以做我想做的事情,或者更好的方式?
对齐两个标签时遇到问题.两个例子来说明问题
[leftLabel setText:@"03"];
[rightLabel setText:@"Description3"];
Run Code Online (Sandbox Code Playgroud)

[leftLabel setText:@"03"];
[rightLabel setAttributedText:[[NSAttributedString alloc] initWithString:@"Description3"]];
Run Code Online (Sandbox Code Playgroud)

在这两个示例中,布局约束都是这样
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bigMargin-[leftLabel]-bigMargin-[rightLabel]-bigMargin-|"
options:NSLayoutFormatAlignAllBaseline
metrics:metrics
views:views];
Run Code Online (Sandbox Code Playgroud)
问题是正确的标签,当文本是属性标签时,它被绘制在下面一点,如图中所示,并且对齐结果错误.
为什么?我能用这UIlabel两种方法解决这个问题吗?
编辑:
我在GitHub上创建了一个项目,并对此进行了测试.这里的问题是即使没有NSAttributdString我也有问题!查看带有数字的标签,与说明和金额没有正确对齐.

我在这里粘贴单元格的代码,但必须在项目中看到整个场景.
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
UIView *contentView = [self contentView];
[contentView setBackgroundColor:[UIColor clearColor]];
dayLabel_ = [[UILabel alloc] initWithFrame:CGRectZero];
[dayLabel_ setTranslatesAutoresizingMaskIntoConstraints:NO];
[contentView addSubview:dayLabel_];
monthLabel_ = [[UILabel alloc] initWithFrame:CGRectZero];
[monthLabel_ setTranslatesAutoresizingMaskIntoConstraints:NO];
[monthLabel_ setFont:[UIFont boldSystemFontOfSize:13.0f]];
[contentView addSubview:monthLabel_];
descriptionLabel_ = [[UILabel alloc] initWithFrame:CGRectZero];
[descriptionLabel_ setTranslatesAutoresizingMaskIntoConstraints:NO];
[descriptionLabel_ setFont:[UIFont …Run Code Online (Sandbox Code Playgroud) 可UIStackView用于调整视图大小,重新定位或折叠视图UITableViewCell吗?
autolayout ×10
ios ×8
iphone ×4
uitableview ×4
objective-c ×2
cocoa ×1
cocoa-touch ×1
constraints ×1
ios15 ×1
ios8 ×1
ios9 ×1
performance ×1
resize ×1
swift ×1
swiftui ×1
uistackview ×1
uitextview ×1
xcode ×1