小编k1t*_*1th的帖子

UIBarButton在独立视图中使用时,iOS 8中屏幕边缘的项目

在我的UINavigation栏中添加了一个带有多个UIViews的XIB,左右栏按钮项的定位是关闭的:

导航栏另外还有XIB中的UIView

XIB中的视图只是一个视图控制器的出口,但不是主视图.它通过以下方式显示:

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
Run Code Online (Sandbox Code Playgroud)

我有另一个更简单的视图,它直接绑定到视图控制器的视图属性 - 正如预期的那样 - 看起来很正常.

正常的导航栏

所有视图都有自动布局.约束很好.我尝试了很多不同的东西,但无法提出修复(或者说是理由).导航栏和项目只是普通的香草酒吧按钮项目,没有任何像外观代理等...

在7.1 sim中,一切看起来都很正常.

有人见过这个吗?

谢谢

[编辑]

我找到了解决方案但不是原因:

如果我而不是

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
Run Code Online (Sandbox Code Playgroud)

它将新视图添加为UIWindow的子视图,

用这个:

[UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
    [self.view addSubview:self.settingsView];
} completion:nil];
Run Code Online (Sandbox Code Playgroud)

它将新视图添加为现有UIViewControllers视图的子视图,一切都很好.

我想知道这个bug和UINavigationBars是否以一种奇怪的方式呈现,如果包含在动态添加到窗口的视图中...

iphone objective-c uinavigationbar uiview ios

11
推荐指数
1
解决办法
831
查看次数

异步调整UITableViewCell与生成的UIView-Encapsulated-Layout-Height

我正在尝试使用iOS 8"从内部"调整表格视图单元格,因此无法实现

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
Run Code Online (Sandbox Code Playgroud)

但使用:

self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 200;
Run Code Online (Sandbox Code Playgroud)

细胞从上到下有限制.

该单元格包含(除其他外)一个UIWebview,它通过询问scrollview的高度,在加载后异步地知道它的大小:

CGFloat fittingHeight = self.messageTextWebView.scrollView.contentSize.height;
Run Code Online (Sandbox Code Playgroud)

(这是一种变体,其中webview包含在另一个视图中,并且该视图相应地调整大小).

因为当这发生时整个自动布局过程完成,我设置

[self setNeedsUpdateConstraints];
Run Code Online (Sandbox Code Playgroud)

在单元格中的视图中,它向着细胞起泡并再次下降layoutSubviews.

最后,我得到了可怕的Unable to simultaneously satisfy constraints..打破一切的约束是

"<NSLayoutConstraint:0x7f8c29d157f0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f8c2b063eb0(270)]>"
Run Code Online (Sandbox Code Playgroud)

当第一次计算单元格时,由表视图创建此约束.

它杀死了我自己:

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7fa8a8515b70 V:[UIView:0x7fa8aa0263e0(263)]>
Run Code Online (Sandbox Code Playgroud)

虽然我将约束的优先级设置为1000,将压缩阻力设置为1000,但我无法覆盖表视图创建的约束.

令人沮丧的是:如果我用简单的多线标签替换网页视图并在第一个单元格布局中了解所有尺寸,那么一切都很完美.这是Web视图加载系统的异步特性,它迫使我在第一次呈现单元格后更改布局.

现在我的问题:

有没有办法解决?我真的不想重新加载单元格.如果单元格是屏幕上唯一的单元格,则不会重复使用,整个过程会重新开始.这甚至是可能的还是UITableView架构依赖于外部约束来正确渲染自身?

只是为了它的乐趣,我设置

self.translatesAutoresizingMaskIntoConstraints = NO;
Run Code Online (Sandbox Code Playgroud)

在单元格本身上,导致一个大小为0,0的单元格和约束:

"<NSLayoutConstraint:0x7f88506663a0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f8850648400(0)]>"
Run Code Online (Sandbox Code Playgroud)

但它还在那里......

谢谢你的帮助.

顺便说一句:我已经阅读了有关此事的所有内容,包括: 在UITableView中使用自动布局进行动态单元格布局和可变行高

constraints uitableview ios autolayout ios8

10
推荐指数
1
解决办法
2086
查看次数