- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经查看了所有我能找到的类似问题,但我还没有找到解决这个问题的方法。
我正在设置 titleView
viewDidLoad
中的此类属性:
self.navigationItem.titleView = label
View Controller 是导航栈的一部分。当您点击前一个 View Controller 中的一行时,它会将此 Controller 插入堆栈。完全正常的 UINavigationController 东西。
当这个 View Controller 开始动画时,标 checkout 现在原点(左上角),然后停留在那里直到 View Controller 完成动画,然后它跳(无动画)到导航中间的正确位置酒吧。
点击后退按钮后,标题 View 会正确显示动画,就像普通标题一样。
这是viewDidLoad
中的代码:
let label = UILabel(frame: CGRect.zero)
label.textAlignment = .center
label.translatesAutoresizingMaskIntoConstraints = false
label.backgroundColor = .red
label.text = "test"
label.sizeToFit()
self.navigationItem.titleView = label
我尝试过的事情:
指定一个框架:没有变化。另外我不想指定一个框架。我不想对导航栏的高度做出假设。
将其移至 viewWillAppear
: 没有变化。
将其移至 viewDidAppear
: 更好但仍然不正确。在动画完成之前标签根本不会出现然后它出现在它应该出现的地方,没有动画它只是出现。正确的行为是像普通标题一样从右到左动画。
使用 Xcode 中的 Master-Detail 项目模板可以轻松重现这一点。如果您想尝试它,只需将上面的代码添加到 configureView()
的顶部即可。在 DetailViewController.swift
.在该模板中,导航项的标题被硬编码到 Storyboard中。您可以通过搜索“详细信息”轻松删除它。单击显示 Navigation Item: Title = "Detail"
的结果然后从检查器 Pane 中删除该字符串。
更新
@synndicate 的建议对 UILabel
非常有效。上面的例子。但我真正的问题是 UIStackView
.当我按照 @synndicate 的方法使用堆栈 View 时,我又遇到了另一个动画问题。这次标题 View 开始滑入,但一直动画到原点。动画完成后,它会捕捉到应有的位置。
这是 prepare(for:sender:)
中的代码正如@synndicate 建议...
let label = UILabel(frame: CGRect.zero)
label.textAlignment = .center
label.translatesAutoresizingMaskIntoConstraints = false
label.backgroundColor = .red
label.text = "test"
let stackView = UIStackView(frame: CGRect.zero)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.addArrangedSubview(label)
stackView.sizeToFit()
controller.navigationItem.titleView = stackView
还有什么建议吗?
此外,这是 Xcode 8 和 iOS 10。
更新 2
我发现上面的堆栈 View 代码在 viewDidLoad
中完美地动画化(就像普通标题一样)对于导航层次结构的根是 UINavigationController
的 View Controller .当导航层次结构的根是 UISplitViewController
时会出现问题。 .
所以我想我可以将我的问题更新为...
如何配置 UIStackView
将在 navigationItem
上设置的 titleView
属性,其中导航层次结构的根是 UISplitViewController
?
最佳答案
在将 View Controller 压入堆栈之前,您能否将代码移动到?
例如在 Master-Detail 项目的 MasterViewController.swift
中
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = tableView.indexPathForSelectedRow {
let object = objects[indexPath.row] as! NSDate
let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
controller.detailItem = object
controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
let label = UILabel()
label.textAlignment = .center
label.backgroundColor = .red
label.text = "test"
label.sizeToFit()
controller.navigationItem.titleView = label
}
}
}
关于ios - NavigationItem 的 titleView 动画不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44166476/
我已经在我的 navigation.titleView 中添加了一个搜索栏 self.navigationItem.titleView = searchBar 还有一个带有 title = "
我正在尝试使用以下代码在 UINavigationItem 上添加我的图像: override func viewDidLoad() { super.viewDidLoad()
Xamarin 新手,我正在尝试在我的跨平台应用程序中创建自定义导航栏。经过一些阅读,我发现我可以在我的 xaml 页面文件中使用标题 View 组件,如下所示。
我正在使用带有自定义 UIView 子类的导航,该子类成为我的 titleView。我想确保这是完整的可用宽度。 从我的 UIViewController 的 viewWillAppear: 逻辑上来
我发现有关使用 UINavigationItem#titleView 和自定义字体的信息很少。当我这样做时,导航栏中的字体垂直不对齐。 这篇文章的部分目的是记录黑客行为,也希望有人对这个问题有一个简洁
我正在尝试添加自定义控件作为 UINavigationBar 中的 titleView。当我这样做时,尽管设置了通常采用全宽的框架和属性,但我得到了: 亮蓝色可以忽略,因为它是我隐藏自定义控件的地方。
我正在尝试动态设置导航栏的文本,以便标题文本始终适合。我是这样完成的: // Pet's Day text "Joy's Day" if let range = currentPet.range(of
我想使用 UITextField 创建一个搜索栏。我尝试将 NavigationItem 的 TitleView 设置为文本字段并设置相应的约束。但导航栏中央的文本字段仍然很短。如何让文本框填满整个导
我正在学习一个 coursera 类(class),我真的到了我认为我不适合这个工作领域(开发)并且应该坚持图形设计的地步。至少我想完成这门类(class),但我不断收到我不明白的错误!根据 logc
我想在第一个 View Controller 的导航栏中添加一个 Logo ,但它的缩放效果很差,因为我不知道最大尺寸是多少。有谁知道吗? 顺便说一句,我知道创建全尺寸图像的技巧,但我不想这样做,我只
当方向改变时调整 UINavigationBar titleview 内容图像大小的最佳方法是什么。我有一张图像高度为 44 像素,另一张图像高度为 32 像素,在旋转 View 后,我更改标题 Vi
在自定义类 MMTimerButton 中,我将按钮设置为响应单击和双击 - (id)initWithFrame:(CGRect)frame { self = [super initWithF
我正在使用 Storyboard ,并将 UIView 添加到带有 2 个子 UILabels 的导航项。我希望 UIView 尽可能达到最大宽度。我注意到我无法使用自动布局来创建约束来执行此操作。这
我的目标是在导航 Controller 页面标题中使用不同字体大小的标题和副标题(标题应该更大,副标题应该相应地更低)。 我找到了实现此功能的代码示例。唯一的问题是未应用字体大小——标题和副标题的字体
我的应用程序适合放在 UINavigationController 中。简单地说,我将 MyUIViewController 设置为 navigationController 的 rootViewCo
我正在尝试推送一个 View Controller 并设置其导航栏的标题,但我猜是因为使用了很长的标题,所以它没有居中。与此同时,后退按钮的范围增加到标题 View ,即如果我点击 Milestone
我想用图像和文本设置 navigationItem 的 titleView,如下图所示: 我该如何实现? 更具体地说,我正在尝试在 Swift 中执行此操作。 最佳答案 条件,你的 Controlle
我有这样的东西: 但我需要为 titleView 设置的 View 在左侧和右侧没有这些边距。像这样: 这就是我实际做的: @property (nonatomic, strong) XHScroll
我在 UIViewController 扩展中使用这个函数来添加一个调整字体以适应宽度的标题。 extesion UIViewController { func setTitleDiffere
在我的 View Controller 中,我将 titleView 设置为 UIView,其中包含一个 UIImageView,使用 setCornerRadius 将其制成一个圆圈层。 圆的上半部
我是一名优秀的程序员,十分优秀!