iOS 10 iMessage应用扩展程序:如何计算超高导航栏的高度

时间:2016-06-17 16:30:31

标签: swift navbar ios-app-extension imessage ios10

我下载了Xcode 8测试版并尝试使用iMessages应用扩展程序sdk,但遇到了看似非标准导航栏高度的问题

当我转换到应用程序的展开视图时,带有以下框架CGRect(x: 0, y: 0, width: 100, height: 100)的图像最终部分隐藏在导航栏后面。我希望它出现在导航栏下方。

我尝试了self.navigationController?.navigationBar.isTranslucent = false但它没有用,我认为这是有道理的,因为它超出了我应用的控制范围。

有没有人玩过这个呢?我想避免两件事。简单地猜测适当的高度并远离程序化解决方案。 compact expanded 谢谢你的帮助

8 个答案:

答案 0 :(得分:15)

对顶部布局指南进行约束可能会有所帮助:

view.topAnchor.constraint(equalTo: self.topLayoutGuide.bottomAnchor).isActive = true

答案 1 :(得分:4)

您可以从控制器的布局指南中获得高度:

self.topLayoutGuide.length

@ Dilts的演示之所以如此,是因为标签' top是顶部布局指南的约束。如果他们是超级视图的约束,那么它也将落后于该栏。

答案 2 :(得分:4)

如果您像我一样仍然难以使用Auto Layout,那么您可以使用viewDidLayoutSubviews方法自动调整视图大小。我有一个与您相同问题的表视图,因此我使用这个简单的方法来更改表格视图的顶部内容插入:

-(void)viewDidLayoutSubviews {
    [self.tableView setContentInset:UIEdgeInsetsMake(self.topLayoutGuide.length, 0, 0, 0)];
}

到目前为止,它在所有iDevices上工作正常(纵向和横向)。

答案 3 :(得分:2)

回答你的问题:“超高导航栏的高度是多少”:

iMessage App Extension NavBar height

这是86px。

更新

关于Navbar隐藏您的UI。我做了一个快速演示,我没有遇到任何问题。

Added labels At y position 20

我在视图顶部添加了几个标签(位于状态栏下方,y点值为20)。接下来,我添加了2个约束:左侧标签的前导空间和顶部空间以及右侧标签的尾随空间和顶部空间。

Result

这是我的结果,无论是在紧凑模式还是扩展。因此,只需确保将组件置于y点值20以下并有一些限制,这样Apple就会为您调整视图大小!

答案 4 :(得分:1)

如果将顶部布局指南设置为顶部约束,则它适用于MSMessagesAppViewController。但它不适用于UIViewControllers,因为布局指南不同。

除非你因某种原因确实需要使用UIViewController类(例如:MessagesAppViewControllers在包含Obj C ++代码时遇到问题),坚持使用MSMessagesAppViewController。

答案 5 :(得分:0)

这是Objective-C

中接受的答案
[view.topAnchor constraintEqualToAnchor:[self.topLayoutGuide bottomAnchor]].active = YES;

答案 6 :(得分:0)

截至目前,使用Xcode 8.2,上述解决方案都不适用于我。 @Dilts答案仅适用于继承自MessageViewController的{​​{1}}。但是当我们尝试使用从MSMessagesAppViewController继承的ViewController时,这将无效。

我通过将Top Constraint绑定到视图而不是Top Layout指南来完成此操作。我将顶部约束设置为零,并将该约束绑定为topLayout。

UIViewController

然后以改变演示风格的方式改变约束值。

@IBOutlet weak var topLayout: NSLayoutConstraint!

enter image description here

紧凑模式

enter image description here

扩展模式

enter image description here

答案 7 :(得分:0)

    [self.view addConstraints: [NSArray arrayWithObjects:

                            [NSLayoutConstraint constraintWithItem:YourViewHere
                                                         attribute:NSLayoutAttributeTop
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:self.topLayoutGuide
                                                         attribute:NSLayoutAttributeBottom
                                                        multiplier:1.0
                                                          constant:0.0],

                            [NSLayoutConstraint constraintWithItem:YourViewHere
                                                         attribute:NSLayoutAttributeBottom
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:self.bottomLayoutGuide
                                                         attribute:NSLayoutAttributeTop
                                                        multiplier:1.0
                                                          constant:0.0],

                            [NSLayoutConstraint constraintWithItem:YourViewHere
                                                         attribute:NSLayoutAttributeLeft
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:[self view]
                                                         attribute:NSLayoutAttributeLeft
                                                        multiplier:1.0
                                                          constant:0.0],

                            [NSLayoutConstraint constraintWithItem:YourViewHere
                                                         attribute:NSLayoutAttributeRight
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:[self view]
                                                         attribute:NSLayoutAttributeRight
                                                        multiplier:1.0
                                                          constant:0.0], nil]];