以编程方式构建带有约束的 titleView (或者通常构建带有约束的视图)

2024-02-11

我正在尝试构建一个具有如下约束的 titleView:

我知道如何用框架来做到这一点。我将计算文本的宽度、图像的宽度,创建一个具有该宽度/高度的视图来包含两者,然后将两者作为子视图添加到带有框架的正确位置。

我试图了解如何在有限制的情况下做到这一点。我的想法是,内在的内容大小会对我有所帮助,但我正在疯狂地尝试让它发挥作用。

UILabel *categoryNameLabel = [[UILabel alloc] init];
categoryNameLabel.text = categoryName; // a variable from elsewhere that has a category like "Popular"
categoryNameLabel.translatesAutoresizingMaskIntoConstraints = NO;
[categoryNameLabel sizeToFit]; // hoping to set it to the instrinsic size of the text?

UIView *titleView = [[UIView alloc] init]; // no frame here right?
[titleView addSubview:categoryNameLabel];
NSArray *constraints;
if (categoryImage) {
    UIImageView *categoryImageView = [[UIImageView alloc] initWithImage:categoryImage];
    [titleView addSubview:categoryImageView];
    categoryImageView.translatesAutoresizingMaskIntoConstraints = NO;
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[categoryImageView]-[categoryNameLabel]|" options:NSLayoutFormatAlignAllTop metrics:nil views:NSDictionaryOfVariableBindings(categoryImageView, categoryNameLabel)];
} else {
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[categoryNameLabel]|" options:NSLayoutFormatAlignAllTop metrics:nil views:NSDictionaryOfVariableBindings(categoryNameLabel)];
}
[titleView addConstraints:constraints];


// here I set the titleView to the navigationItem.titleView

我不应该对 titleView 的大小进行硬编码。应该可以通过其内容的大小来确定,但是......

  1. titleView 确定它的大小为 0,除非我对框架进行硬编码。
  2. 如果我设置translatesAutoresizingMaskIntoConstraints = NO应用程序因以下错误而崩溃:'Auto Layout still required after executing -layoutSubviews. UINavigationBar's implementation of -layoutSubviews needs to call super.'

Update

我让它可以使用这段代码,但我仍然必须在 titleView 上设置框架:

UILabel *categoryNameLabel = [[UILabel alloc] init];
categoryNameLabel.translatesAutoresizingMaskIntoConstraints = NO;
categoryNameLabel.text = categoryName;
categoryNameLabel.opaque = NO;
categoryNameLabel.backgroundColor = [UIColor clearColor];

UIView *titleView = [[UIView alloc] init];
[titleView addSubview:categoryNameLabel];
NSArray *constraints;
if (categoryImage) {
    UIImageView *categoryImageView = [[UIImageView alloc] initWithImage:categoryImage];
    [titleView addSubview:categoryImageView];
    categoryImageView.translatesAutoresizingMaskIntoConstraints = NO;
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[categoryImageView]-7-[categoryNameLabel]|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:NSDictionaryOfVariableBindings(categoryImageView, categoryNameLabel)];
    [titleView addConstraints:constraints];
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[categoryImageView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(categoryImageView)];
    [titleView addConstraints:constraints];
    
    titleView.frame = CGRectMake(0, 0, categoryImageView.frame.size.width + 7 + categoryNameLabel.intrinsicContentSize.width, categoryImageView.frame.size.height);
} else {
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[categoryNameLabel]|" options:NSLayoutFormatAlignAllTop metrics:nil views:NSDictionaryOfVariableBindings(categoryNameLabel)];
    [titleView addConstraints:constraints];
    constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[categoryNameLabel]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(categoryNameLabel)];
    [titleView addConstraints:constraints];
    titleView.frame = CGRectMake(0, 0, categoryNameLabel.intrinsicContentSize.width, categoryNameLabel.intrinsicContentSize.height);
}
return titleView;

我真的需要限制,所以今天就尝试了一下。我发现有效的是:

    let v  = UIView()
    v.translatesAutoresizingMaskIntoConstraints = false
    // add your views and set up all the constraints

    // This is the magic sauce!
    v.layoutIfNeeded()
    v.sizeToFit()

    // Now the frame is set (you can print it out)
    v.translatesAutoresizingMaskIntoConstraints = true // make nav bar happy
    navigationItem.titleView = v

奇迹般有效!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式构建带有约束的 titleView (或者通常构建带有约束的视图) 的相关文章

  • 如何将 UIImageView 裁剪为自定义形状

    用户是否可以在该位周围画一条虚线 圆圈 UIImageView他们希望裁剪到 然后为UIImageView调整大小到这些点 这有点像 Photoshop 中的套索 选取框效果 更新 从 iOS 8 x 开始 UIImageView 提供了m
  • ShareKit + Facebook 身份验证不起作用

    我正在使用 ShareKit 从我正在开发的 PhoneGap 应用程序发布到 Facebook 我在 Facebook 中创建了该应用程序 并在我的项目中安装了该插件 Twitter 工作正常 但当我尝试在 Facebook 上分享时出现
  • 如何修复 ReactiveCocoa(带有 CocoaPods)的安装?

    这里是新手 尝试将 ReactiveCocoa 2 2 4 和 CocoaPods 安装到项目中 但在运行时遇到错误 我用过github 上的这个 podspec https github com CocoaPods Specs blob
  • UITextView:内存使用量巨大

    我在 UITextView 中遇到了内存使用过多的问题 我正在将 50Kb ascii 文本文件加载到 NSString 中 并将其分配给应用程序中空 UITextView 组件的 text 属性 这立即使我的内存占用量增加了 100Mb
  • 进入后台时 Alamofire 请求卡住?

    我正在使用 Alamofire 调用 Web 服务 该服务需要相当长的时间才能加载 如果应用程序进入后台 当我返回应用程序时 我会被加载程序卡住 我想这是因为调用永远不会向我的完成处理程序返回任何内容 我该如何解决这个问题 您可以使用后台抓
  • 选择 UITableViewCell 时 UIView 背景颜色消失

    我在界面生成器中构建了一个简单的 tableViewCell 它包含一个包含图像的 UIView 现在 当我选择单元格时 会显示默认的蓝色选择背景 但 UIView 的背景颜色消失了 我的 UITableViewCell 的实现文件没有做任
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • 在回调函数中调用目标c函数

    如何在回调函数中调用目标c函数 回调函数 static OSStatus inputRenderCallback void inRefCon AudioUnitRenderActionFlags ioActionFlags const Au
  • 使用自动布局、IB 和字体大小时表头视图高度错误

    我正在尝试为我的 uiTableView 创建一个标题视图 不是节标题 我已经有了 我已经在界面生成器中设置了一个 XIB 所有的连接都已连接好并且运行良好 除了桌子没有给它足够的空间 我的问题是表格顶部与表格标题有一点重叠 我的 XIB
  • 保存来自 TrueDepth 相机的深度图像

    我正在尝试保存 iPhone X TrueDepth 相机的深度图像 使用AVCam照片滤镜 https developer apple com library content samplecode AVCamPhotoFilter Lis
  • 使用 Quartz 创建 PDF 注释 (iOS)

    有人设法使用 Quartz 在现有 PDF 中编写自定义注释吗 我已经使用 CGPDFDocumentRef 等渲染了 PDF 现在工作正常 我成功地阅读了 Annots 字典 if CGPDFDictionaryGetArray page
  • Apple Developer 应用程序门户不再可以生成新的 Bundle Seed ID

    iOS 开发者门户中的新界面不再为您的应用程序 ID 提供 生成新的 按钮 取而代之的是 使用团队 ID 这将导致使用相同的种子 ID 任何人都知道为什么要进行更改以及您应该如何使用新的捆绑包种子 ID 随意补一些 不再可能生成新的种子 I
  • 如何使用 Swift 将“完成”按钮添加到 iOS 中的数字键盘?

    它在默认键盘上工作得很好 但我无法让它在数字键盘上工作 有任何想法吗 据我所知 你不能在键盘部分添加 完成 按钮 你应该添加一个inputAccessoryView to the UITextField or UITextView 如果这就
  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • iOS 如何触发视频退出全屏后继续播放?

    我正在构建一个在 iOS 中播放视频的网站 我有一个在 iOS 中工作的全屏按钮 但是退出全屏时视频会暂停 有谁知道一种方法可以强制视频在退出全屏时继续播放 或者如何设置一个侦听器来触发视频在退出全屏时自动播放 这是我的代码
  • 命令 /Applications/Xcode-beta.app/Contents/Developer/usr/bin/atool 失败,退出代码 255

    它发生在新的 Xcode7 beta 中 CompileAssetCatalog Users admin Library Developer Xcode DerivedData InstaAd ddgdnbxlpxipirebpndfmgr
  • 带有 allowedEditing 的 UIImagePickerController 不允许平移裁剪

    我在这里看到这个问题 UIImagePicker 允许编辑卡在中心 https stackoverflow com questions 12630155 uiimagepicker allowsediting stuck in center
  • XCode 7 中的 AWSS3TransferManagerUploadRequest

    我今天升级到 Xcode 7 Swift 2 0 我的项目正在使用 CocoaPods 我正在 POD 文件中导入所有与 AWS 相关的文件 我已经设置了桥接标头 并导入了 Amazon 告诉我的所有文件 在升级到 Swift 2 0 之前
  • 如何在 iOS 上固定证书的公钥

    在提高我们正在开发的 iOS 应用程序的安全性时 我们发现需要对服务器的 SSL 证书 全部或部分 进行 PIN 操作以防止中间人攻击 尽管有多种方法可以做到这一点 但当您搜索此内容时 我只找到了固定整个证书的示例 这种做法会带来一个问题
  • cordova插件条码扫描仪打不开扫描

    我的条形码扫描仪插件有问题 我不是天才 我不太了解如何编写网络应用程序 我使用phonegap和cordova 并且尝试制作一个网络应用程序 在单击链接后扫描条形码 我之前已经使用此命令行安装了该插件 cordova plugin add

随机推荐

  • WPF 在 InitializeComponent 期间获取 Control null 引用

    So my InitializeComponentWindow 构造函数中的方法调用通过 XML 运行并添加控件并将它们插入到事件中 因此 当其中一个控件的属性发生更改时 它会调用订阅该事件的方法 该方法引用尚未构建的控件 为什么这里会按这
  • 如何在c中绘制直方图

    如何在 c 中从 2 个数组绘制直方图 您可以用这个字符 来表示图表中的计数 这是一个可以打印的字符 printf c char 254u 考虑一些随机的float arr and hist保存计数的数组 Code Function gen
  • 越野车弹跳球

    我在处理中制作碰撞球草图时 遇到了一个奇怪的错误 尽管有从墙上弹起的条件 有些球粘在上面 我在这里找不到错误的根源 有人可以帮忙吗 我还意识到可能很少 很多 糟糕的编码实践 但我事先道歉 我在下面发布代码 1 主要 https pasteb
  • Webpack / ES6:如何导入样式表

    我看到像 bootstrap 这样的存储库开始在它们的中包含额外的标签package json 文件 例如 style 和 less https github com twbs bootstrap blob v4 0 0 alpha 2 p
  • 在文本区域“内部”加粗文本

    我有一个文本区域 myarea我正在其中输入文本 我已经输入了这段文字 这是一个句子 只有这个词 最终会被加粗 现在我的侧面有一个按钮 就像一个粗体按钮 我想选择想要加粗的字母 单击按钮 然后看到这些字母在文本区域内变成粗体 它与许多编辑器
  • UITableViewCell - 如何在重用之前重置内容

    有一个烦人的错误我无法修复 我有一个CustomCell 其中我有一个子视图 可以根据对象的值更改其颜色 UITableViewCell tableView UITableView tableView cellForRowAtIndexPa
  • 如何使用 jQuery 选择的插件重置表单?

    我有一堆select元素的形式为我正在使用 Jquery Chosen 插件 https github com harvesthq chosen 如何重置表格 以下不起作用
  • Three.js 图块具有使用平面几何的多个纹理

    所以我正在尝试构建一个由图块组成的基于 3D 的世界 我已经成功地使用平面几何和高度值等做到了这一点 但现在我已经到了我可能必须改变一切的地步 问题是我希望一个图块具有多个纹理 使用着色器 因为我想混合它们 我能够在全球范围内执行此操作 因
  • 获取任意变换的 MatrixTransform

    我在 WPF 堆栈中工作 我希望能够为任何 Transform 获取 MatrixTransform 根据链接here http msdn microsoft com en us library system windows media t
  • Swing 数据绑定框架

    几乎同样的问题被问过year ago https stackoverflow com questions 510655 jgoodies binding vs jsr 295 但是这方面已经有了一些新的发展 为 Swing 应用程序选择一个
  • 尝试获取 PDO 中非对象的属性

    首先 我知道这可能是一个重复的问题 但我做了一些搜索 例如这个问题 https stackoverflow com questions 5891911 trying to get property of non object in但我不明白
  • 将 xml 转换为 json 以将文件处理为 Bigquery

    我想将 stackexchange 原始数据处理到 BigQuery 中 但首先数据使用 7z 压缩格式 因此我解压缩数据以将其移植为 gz 格式 但内部文件是 xml 所以我需要将文件从 xml 转换为 json 有任何想法吗 我使用 p
  • 我如何使用 Objective C 中的照片框架从图库访问照片

    我是照片框架的新手 我不知道如何使用它 我使用了很多链接 但我很困惑如何在 imageview 中显示图像 我想使用我正在尝试的照片框架从图库中获取所有照片 NSMutableOrderedSet recentsDataSource PHF
  • 仅使用 hashKey 查询 dynamoDB

    我想仅使用 Hashkey 查询我的 dynamoDB 我的表 名称 testTable 架构如下 字符串自动ID HashKey 字符串 AlexandriaID RangeKey 字符串文档类型 我的 dynamoDBQueryExpr
  • 为什么 bytes.fromhex() 会奇怪地处理某些十六进制值?

    我正在尝试使用Python中的套接字库将两个十六进制数字的字节发送到一个编程为接受它们的硬件 要从用户输入的十六进制数字字符串创建字节 我尝试使用bytes fromhex 描述的方法here https docs python org d
  • 错误:请求“this”中的成员“..”,该成员属于非类类型“--* const”

    我的第一个问题在这里 请原谅 我刚刚进入C 并开始使用DS 堆 我的代码 我认为 using namespace std typedef char stackElement class Stack public stackElement c
  • URLS 问题中的 Django 双斜杠(多个 Web 服务器、Apache 和 Nginx)

    要查看示例 加载 example com 单击链接到 test 的链接 而不是访问 http example com test 而是访问 http www example net 测试 或者 如果您登录 自动生成的 django 管理部分的
  • 如何在悬停时更改 img src 时添加过渡?

    所以我尝试使用 javascript 在原始图像悬停时添加不同的图像 我的语法与此类似 效果很好 function imgHover projectImage src img img1 png function imgHover2 proj
  • java编译器目标版本“jsr14”与JDK 7/8

    谁能告诉我jsr14的目标选项javacJDK7 8 仍然可用吗 Say javac source 1 5 target jsr14 Hello java 我们在 OSGi 中大量使用 jsr14 因为它允许我们在 API 中使用泛型 但仍
  • 以编程方式构建带有约束的 titleView (或者通常构建带有约束的视图)

    我正在尝试构建一个具有如下约束的 titleView 我知道如何用框架来做到这一点 我将计算文本的宽度 图像的宽度 创建一个具有该宽度 高度的视图来包含两者 然后将两者作为子视图添加到带有框架的正确位置 我试图了解如何在有限制的情况下做到这