Tag: 自动布局

iOS 8自动高度单元在第一次加载时不正确的高度

我有一个iOS 8应用程序,我有一个search结果页面,每个单元格基于某个标签的高度进行自动化。 但是,视图第一次加载后显示的单元格不会自动大小。 向下滚动后,单元格的大小正确。 我正在接线故事板中的自动布局约束。 我在viewDidLoad中有以下代码。 – (void)viewDidLoad { [super viewDidLoad]; //configure tableView so that we use autolayout enabled row heights self.tableView.estimatedRowHeight = 68; self.tableView.rowHeight = UITableViewAutomaticDimension; } 有没有人经历过这个?

为什么添加对象后UIScrollView不能完全滚动? 使用故事板,ARC和Xcode 4.5.2

所以,我知道也有类似的问题,但也许不准确(所以请不要标记我 – 只是警告我什么的)。 我已经search了解决这个简单问题的日子。 使用故事板,ARC和Xcode 4.5.2,我只需要在UIScrollView中放置一堆标签并垂直滚动。 我已经在viewDidLoad,viewDidAppear和viewWillAppear中尝试了很多设置框架大小和内容大小的组合,但无济于事。 滚动视图在内部没有任何内容的情况下完全滚动,但是当我为其添加标签时,滚动仅滚动很短的部分。 注意:我需要使用自动布局,否则我的整个项目会搞砸。 这是我现在的代码 .h文件: #import <UIKit/UIKit.h> @interface MortgageRatesViewController : UIViewController <UIScrollViewDelegate, UIScrollViewAccessibilityDelegate> – (IBAction)backButton:(id)sender; @property (strong, nonatomic) IBOutlet UIView *mortgageView; @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @end .m文件: #import "MortgageRatesViewController.h" @interface MortgageRatesViewController () @end @implementation MortgageRatesViewController – (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if […]

Autolayout和编程约束:如何处理updateConstraints多次触发?

以编程方式创build布局时,我遵循Apple的build议:override -updateConstraints,添加自定义约束,并且在子视图添加到视图中时调用-setNeedsUpdateConstraints。 我的典型设置如下所示: – (void)setupViews { //Style View //Add gesture recognizers //Add Subviews [self setNeedsUpdateConstraints]; } – (void)updateConstraints { //Add custom constraints [super updateConstraints]; } 问题 在某些情况下,多次触发-updateConstraints(例如,当一个视图的控制器被呈现或推动w /animation时)。 这里的问题是添加的每个约束被重新添加。 当试图按需改变增加的约束的常量时,这成为一个严重的问题,因为原来的约束有两个随后相互冲突。 我想,即使你在创造它们之后没有操纵约束条件,那么你看起来也不是很好。 潜在的解决scheme 1 – 删除影响视图的所有约束,然后在-updateConstraints中应用它们: – (void)updateConstraints { //Remove all constraints affecting view & subviews //Add custom constraints [super updateConstraints]; } 2 – 在添加自定义约束之前,根据它设置布局标志并进行检查: – […]

embedded在程序化UIView中的自动布局XIB不会调整到父级

我有一个xib文件表示一个简单的视图与自动布局,我正在用[[NSBundle mainBundle] loadNibNamed:@"name"][0]实例化,并通过addSubview:添加到编程创build的UIView addSubview: 问题在于视图不能伸展以符合embedded视图的大小; 相反,它似乎是默认的xib文件中指定的大小。 (我也找不到任何方法来设置容器视图本身在xib文件,只有其子视图的约束。) 另外有点奇怪,当我旋转iPad时,视图的宽度会进一步缩小比例。 所以很明显,它是以某种方式连接起来的,但是有了错误的初始值。 我错过了什么连接让这个embedded式视图正确地适合视图层次? 屏幕截图(为debugging添加洋红着色): 旋转到肖像后:

方向更改后,UITableView布局中的错误

我有一个基于自动布局(约束)的应用程序,并注意到在方向更改后,tableview存在问题。 repro的步骤如下(我有一个非常基本的repro应用程序 – 一个tableview和添加一个新的项目添加button)。 将您的应用程序旋转到横向模式,以便tableview现在是横向的。 添加一个项目到tableview看下面的1 旋转回肖像,tableview现在将在水平平移上浮动(就像滚动查看器的内容大小是风景),参见[2] 1代码添加 – (IBAction)onAdd:(id)sender { count ++; [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:count-1 inSection:0]] withRowAnimation:UITableViewRowAnimationBottom]; } [2]浮动表视图 任何想法如何解决这个问题? 另外,如何知道这是已知问题还是我应该向苹果公司报告?

UIViewanimation更改与自动布局约束

假设我有一个如下所示的项目: 有两个UIView – 一个叫做yellowBox ,另一个叫redBox 。 自动布局约束规定yellowBox距离超级视图的顶部60点,具有350点的前导和尾随空格(即,视图的左侧和右侧)。 redBox具有相同的前后空格限制。 在两个0的框之间有一个垂直空间约束,表示yellowBox框的底部应该总是直接在redBox顶部。 当用户点击展开黄色框button时,我想要增加黄色框的高度,结果, redBox向下移动以继续满足垂直空间限制( yellowBox始终位于redBox顶部)。 这里是animation代码: – (IBAction)expandYellowBox:(id)sender { [UIView animateWithDuration:0.5 animations:^{ CGRect newFrame = self.yellowBox.frame; newFrame.size.height += 50; self.yellowBox.frame = newFrame; }]; } 不过,我一直无法正常工作。 正如你可以看到红色的图标,目前有一个约束的问题: 这是公平的,因为没有办法让自动布局知道盒子的高度。 但是,我不知道如何解决这个问题,这样可以调整箱子的大小和移动。 例如,如果我在yellowBox上指定高度约束,那么将阻止它被resize。 如果我将高度约束设置为大于或等于 (允许yellowBox高度增加),那么我得到一个不同的约束错误: 所有约束条件都是在故事板中使用Xcodebuild立的 – 没有一个是用代码编写的。 任何帮助不胜感激。 编辑:事实certificate,button被点击时, yellowBox正在增长 – 这只是我不能说,因为它出现在redBox后面。 我只是四次点击后才注意到,它开始出现在redBox的底部。 然而,同样的问题仍然存在 – 如何让redBox始终坚持redBox的底部。

自动约束约束 – 键盘

我卡住试图animation顺利有一个自动布局的限制。 在我的.h中有一个对“keyboardHeight”的约束的引用,并把它和IB联系起来。 我想要做的就是在popup的时候用键盘对桌面视图进行animation处理。 这是我的代码: – (void)keyboardWillShow:(NSNotification *)notification { NSDictionary *info = [notification userInfo]; NSValue *kbFrame = [info objectForKey:UIKeyboardFrameEndUserInfoKey]; NSTimeInterval animationDuration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; CGRect keyboardFrame = [kbFrame CGRectValue]; CGFloat height = keyboardFrame.size.height; [UIView animateWithDuration:animationDuration animations:^{ self.keyboardHeight.constant = -height; [self.view setNeedsLayout]; }]; } 事情是animation块是瞬间的,我看到空白键盘完成其animation之前出现。 所以基本上我看到了键盘animation的视图的白色背景。 只要键盘animation,我不能使animation持续。 我是否以错误的方式接近? 提前致谢!

自动布局UIButtons之间相等的空间

我是新的自动布局,所以在这里阅读有点问题堆栈我试图alignment我的5个UIButtons在单元格的底部有相等的空间(例如7点),我试着使用代码,它doesn'工作。 我的问题是 – 我怎样才能使用Interface Builder? UIButton *button1 = self.btnFavorite, *button2 = self.btnCalendar, *button3 = self.btnEmail, *button4 = self.btnMessage, *button5 = self.btnCall; NSMutableArray *constraintsForButtons = [[NSMutableArray alloc] init]; float unusedHorizontalSpace = self.bounds.size.width – button1.intrinsicContentSize.width – button2.intrinsicContentSize.width – button3.intrinsicContentSize.width – button4.intrinsicContentSize.width – button5.intrinsicContentSize.width; NSNumber *spaceBetweenEachButton = [NSNumber numberWithFloat: unusedHorizontalSpace / 5 ] ; [constraintsForButtons addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat: @"H:|-(space)-[button1]-(space)-[button2]-(space)-[button3]-(space)-[button4]-(space)-[button5]-(space)-|" […]

Autolayout在计算UITableViewCell高度时忽略多行的detailTextLabel(所有样式)

所以我试图使用内置的UITableViewCell样式 – 特别是UITableViewCellStyleSubtitle – 与单行textLabel,但多行的 detailTextLabel 。 但(自动)计算的单元格高度始终太短,似乎忽略了多于一行的细节。 我已经尝试使用numberOfLines = 0,estimatedRowHeight,UITableViewAutomaticDimension,preferredMaxWidthLayout等,但在所有的排列行为 – 的确是所有的UITableViewCell样式 – 看来UITableViewAutomaticDimension单元格高度计算将正确地占多行textLabel (耶! ),但错误地认为detailTextlabel最多只有一行( 不可 !)。 因此,具有多行detailTextLabel的单元格太短,因此单元格内容溢出单元格的顶部和底部。 我已经发布了一个快速testing应用程序,在GitHub上显示这种行为。 添加额外的文本行很好 – 所有的单元格样式适当增加高度以适应 – 但添加额外的细节线没有任何改变单元格的高度,并迅速导致内容溢出; 文本+细节本身是正确布置的,并且正确地集中在单元格的中间(所以在这个意义上layoutSubviews正常工作),但是整个单元格高度本身并没有改变。 它几乎看起来像cell.contentView和标签之间没有实际的顶部和底部约束,而是直接从(可能是多行)textLabel和(只有单行)detailTextLabel的高度计算单元格高度,然后一切都集中在单元格的中间…再次,多行textLabel是好的,我在textLabel和detailTextLabel之间没有什么不同,但只有前者(正确)调整单元格的高度。 所以我的问题是,如果有可能使用内置的UITableViewCell样式来可靠地显示多行的 detailTextLabels ,或者这是不可能的,你需要创build一个自定义的子类吗? [或者,几乎等同于,不必重写子类中的layoutSubviews并手动重新连接所有约束]。 [2016年5月4日]结论:截至iOS9多行detailTextLabels不按预期与UITableViewAutomaticDimension工作; 单元格将一直太短,文本/细节将溢出顶部和底部。 要么你必须自己手动计算正确的单元格高度,或创build和布局自己的等价自定义UITableViewCell子类,或(请参阅我的答案下面)子类UITableViewCell和修复systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:返回正确的高度[推荐]

dynamic设置tableHeaderView高度

我的应用程序创build一个UITableViewController,它包含一个可以有任意高度的自定义tableHeaderView。 我一直在努力dynamic地设置这个头,因为似乎build议的方法已经缩短了这个头。 我的UITableViewController的相关代码: import UIKit import SafariServices class RedditPostViewController: UITableViewController, NetworkCommunication, SubViewLaunchLinkManager { //MARK: UITableViewDataSource var post: PostData? var tree: CommentTree? weak var session: Session! = Session.sharedInstance override func viewDidLoad() { super.viewDidLoad() // Get post info from api guard let postData = post else { return } //Configure comment table self.tableView.registerClass(RedditPostCommentTableViewCell.self, forCellReuseIdentifier: "CommentCell") let tableHeader […]