首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让自定义的UINavigationItem titleView在改变大小后能够正确定位?

要让自定义的UINavigationItem titleView在改变大小后能够正确定位,可以按照以下步骤进行操作:

  1. 自定义titleView:创建一个自定义的UIView,并将其设置为UINavigationItem的titleView属性。可以使用任何你喜欢的方式来自定义这个视图,例如使用UILabel、UIImageView等。
  2. 自动布局:使用Auto Layout来确保titleView在改变大小后能够正确定位。可以使用约束来控制titleView的位置、大小和对齐方式。确保设置了正确的约束条件,以便在titleView大小改变时,它能够自动调整位置和大小。
  3. 更新约束:当需要改变titleView的大小时,更新相关的约束条件。可以通过修改约束的constant属性来改变titleView的大小。然后调用UINavigationItem的setNeedsLayout方法来触发布局更新。

以下是一个示例代码,展示如何实现自定义的UINavigationItem titleView的大小调整和定位:

代码语言:txt
复制
// 创建自定义的titleView
let customTitleView = UIView()
customTitleView.backgroundColor = UIColor.red

// 设置titleView
navigationItem.titleView = customTitleView

// 添加约束
customTitleView.translatesAutoresizingMaskIntoConstraints = false
customTitleView.widthAnchor.constraint(equalToConstant: 100).isActive = true
customTitleView.heightAnchor.constraint(equalToConstant: 40).isActive = true
customTitleView.centerXAnchor.constraint(equalTo: navigationItem.titleView!.centerXAnchor).isActive = true
customTitleView.centerYAnchor.constraint(equalTo: navigationItem.titleView!.centerYAnchor).isActive = true

// 修改titleView的大小
customTitleView.widthAnchor.constraint(equalToConstant: 200).isActive = true
customTitleView.heightAnchor.constraint(equalToConstant: 80).isActive = true
navigationItem.titleView?.setNeedsLayout()

在这个示例中,我们创建了一个红色的自定义titleView,并设置其初始大小为100x40。然后,我们通过约束将其水平和垂直居中于UINavigationItem的titleView中。最后,我们修改了titleView的大小为200x80,并调用setNeedsLayout方法来触发布局更新。

这样,无论你如何改变titleView的大小,它都会根据约束条件自动调整位置和大小,从而实现正确的定位。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

手把手带你撸一个网易云音乐首页(三)

,第一个冒出来想法就是在 Cell 中放置 UICollectionView,它的布局也很简单,直接用系统提供的即可,不需要我们去自定义布局。...但是,通过观察你会发现它的 UI 样式其实是有讲究的,就是在同一个页面中,它的第二个 item 也需要露出一部分,这该如何去实现呢!...OK,那这个想法是不是正确呢!其实当你动手实践后,你会发现这样实现后会有一个非常头疼的 bug,那就当 item 滚动的时候会出现遮挡,这用户体贴也太差了。...image 有人要问那是不是 UICollectionView 这个控件就只能按照屏幕的大小来分页呢!答案当然是否定的。我们还可以用自定义的方式来实现分页滚动。...由于我们工程里首页控制器是继承自 UITableViewController 的,所以我们可以直接设置它 UINavigationItem 属性中的 leftBarButtonItem,titleView

2.3K10
  • iOS多控制器之UINavigationController&UITableBarController1. 多控制器2. UINavigationController3. UITableBarCont

    UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //创建窗口,根据屏幕大小设置...Paste_Image.png 2.5 修改导航栏的内容 导航栏的内容由栈顶控制器的navigationItem属性决定 UINavigationItem有以下属性影响着导航栏的内容 //左上角的返回按钮...(nonatomic,retain) UIView *titleView; // 中间的标题文字 @property(nonatomic,copy) NSString...navigationBar 是通过"导航控制器"对象调用的 如果想改变导航条整体的样式 那么应该找 navigationbBar 如果想改变导航条上内容找 navigationItem 3....UITabBarButton在UITabBar中得位置是均分的,UITabBar的高度为49。 UITabBar的结构⼤大致如下图所示: ?

    1.4K40

    UINavigationController

    :(BOOL)animated; //回到根控制器(栈底控制器) - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; 如何修改导航栏的内容...导航栏的内容由栈顶控制器的navigationItem属性决定 UINavigationItem有以下属性影响着导航栏的内容 //左上角的返回按钮 @property(nonatomic,retain...) UIBarButtonItem *backBarButtonItem; //中间的标题视图 @property(nonatomic,retain) UIView *titleView...根据Segue的执行(跳转)时刻,Segue可以分为2大类型 自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转 按住Control键,直接从控件拖线到目标控制器 如果点击某个控件后...需要设置一个标识 在恰当的时刻,使用perform方法执行对应的Segue [self performSegueWithIdentifier:@"login2contacts" sender:nil];

    1.4K60

    六天完成一个简单iOS App - 第四天

    View并排存放,每个View的frame为屏幕大小。...titleView也是添加在主控制器上,显示在scrollView上面,保证titleView永远显示在主控制器的View上,不会随着scrollView的滚动而滚动。...,titleView中button使用自定义CLTitleButton,便于在自定义CLTitleButton内部设置button标题,颜色,字体大小等。...精华页面中全部界面的显示 自定义cell的分析,因为全部页面中有4种cell,4种cell顶部和底部都是一样的唯有中间部位不一样。这里自定义cell有两种方案。...中titleView上方添加下拉刷新的View,使用scrollView代理方法监听tableView的contentOffset,当开始下拉,contentOffset改变时显示刷新View,当滑动结束并且

    1.4K70

    Android自定义View的实现方法,带你一步步深入了解View(四)

    如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。那么下面我们就来依次学习一下,每种方式分别是如何自定义View的。...那么剩下的问题就是如何让这个View在界面上显示出来了,其实这也非常简单,我们只需要像使用普通的控件一样来使用CounterView就可以了。...到了这里,一个自定义的标题栏就完成了,那么下面又到了如何引用这个自定义View的部分,其实方法基本都是相同的,在布局文件中添加如下代码: 能够加深大家对这种自定义View方式的理解,下面我们再来编写一个新的继承控件。...好了,自定义View的功能到此就完成了,接下来我们需要看一下如何才能使用这个自定义View。

    1.2K90

    网易考拉 Android 通知栏适配全方案

    由于历史原因,Android在发布之初对通知栏Notification的设计相当简单,而如今面对各式各样的通知栏玩法,谷歌也不得不对其进行更新迭代调整,增加新功能的同时,也在不断地改变样式,试图迎合更多人的口味...大尺寸小图标在部分机型上显示不正确 问题详情 这个问题主要在部分机型的4.X系统上遇见,小图标大小没有按照24dp裁剪,而是采用了桌面图标一样的大小96dp。...理想是美好的,但现实是残酷的。使用这种方式自定义的布局,会存在与原生的通知栏消息样式不一致的可能,包括小图标/大图标的大小,字体的大小与颜色,时间的显示方式(不同版本的时间显示位置和样式都不一样)。...背景色透明,通过特殊方式拿到通知栏字体颜色和字体大小。 ? 其中,第一种方案简单,能够兼容所有厂商机型。例如京东固定背景色为黑色,字体为红色。...因此,emoji表情的适配其实相对较简单,就是根据不同的系统版本实现不同的支持。当然,如果需要简化那么让只需要让运营配置Unicode 6版本的emoji表情就能够适配4.4+版本的系统了!

    5.2K11

    控制器和应用数据存储

    :(BOOL)animated;        回到根控制器:- (NSArray *)popToRootViewController ainimated:(BOOL)animated;     3)UINavigationItem...(nonatomic, retain) UIView *titleView; //中间的标题文字 @property(nonatomic, copy) NSString *title; //...;      2)、Documents保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录;    3)、tmp保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。...3)、使用NSKeyedArchiver对自定义对象进行归档, 使用NSKeyedUnarchiver解析归档对象       首先自定义类需要实现NSCoding协议,然后实现方法      - (void...)encodeWithCoder:(NSCoder *)aCoder; //定义自定义类哪些属性需要归档,如何归档      - (id)initWithCoder:(NSCoder *)aDecoder

    81230

    项目需求讨论-仿ios底部弹框实现及分析

    hi,在项目开发中,有时候需要仿照ios的底部弹框做效果,比如我们在iPhone上面关闭定位的时候,就会弹出ios特有的底部弹框: ?...经过上面二步的修改,我们可以看到了效果变成了这样: ? 那接下去如何让弹框变成在底部呢??????...的确是在底部了,但是这时候可能有人会有疑问,我们这个自定义View的布局fragment_ios_dialog.xml里面,明明layout_width是match_parent,可是左右二边是间隙的,...所以我们先来改变window的宽度。...同时这里我们要额外增加监听动画结束事件,因为我们让弹框往下移动结束后,要让这个弹框dismiss掉: Animation slide = new TranslateAnimation( Animation.RELATIVE_TO_SELF

    1.1K30

    在 View 上使用挂起函数

    并不是所有的操作都有已取消或出错的状态,但是这些操作有。就像后面 Animator 的示例中那样,我们必须把这些状态传递到协程中,让调用者可以处理错误的状态。...等待 View 被布局完成 让我们看一个例子,它封装了一个等待 View 传递下一次布局事件的任务 (比如说,我们改变了一个 TextView 中的内容,需要等待布局事件完成后才能获取该控件的新尺寸):...endedSuccessfully = false } override fun onAnimationEnd(animation: Animator) { // 为了在协程恢复后的不发生泄漏...{ val anim1 = async { // ... } val scroll = async { // 我们希望在 anim1 完成后,延迟...接下来的文章中,我们将探讨如何使用协程来组织一个复杂的变换动画,其中也包括了一些常见 View 的实现,感兴趣的读者请继续关注我们的更新。

    2.4K30

    【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)

    控件; -- UIControl 主要作用 : 定义通用接口, 为活动控件的事件机制提供实现, 发生指定的动作后, 控件会初始化 Action 方法, 回调对应的事件处理方法; -- 事件处理方法 :...; -- 高亮 : UI 控件突出显示, 处于高亮状态; 手放在按钮上处于高亮状态; -- 禁用 : UI 控件关闭后, 处于禁用状态; 禁用状态的控件不可操作, 禁用操作在 Interface Builder...; -- Plain 属性值 : 默认即可; -- Attribute 属性值 :  (4) Tittle 属性 Font 属性 : 用于控制文字的 字体, 大小, 风格; (5) Text Color...自定义键盘附件 :  -- 作用 : 不是所有的应用都有导航栏, 在没有导航栏的应用中, 需要有键盘附件来关闭键盘; -- 1....自定义选择菜单 (1) 自定义菜单简介 自定义菜单 :  -- 1.

    6.9K20

    IOS本地化应用

    即将须要翻译的字符串替换成其它如果已经是翻译过的“译文”,能够用谷歌翻译替换一下或者是将全部元音字母替换成x。...这样做的目的是为了尽早发现问题。 (2)冻结UI 在应用开发的周期中必需要有一个明白的时间点来冻结UI。在此之后要坚决杜绝会影响本地化的资源变更。nib 文件能够在XCode中锁定。...(6b)本地化变更假设你做了一些本地化变更,比方改变了已本地化的文本,那么就须要从头開始这个过程。并将这些变更发给本地化人员。能够重用之前的字符串翻译,这么做会大大提高效率,但仍然非常麻烦。...就像作者所说的那样: 下面是OHAutoNIBi18n.m类。做了一下小改动,在不改变 frame 的情况下。...对 UILabel、UIButton、UITextField 的字体大小做了一下自适应。

    89900

    iOS系统中导航栏的转场解决方案与最佳实践

    而 UINavigationBar 样式的数据就存储在 UIViewController 的 UINavigationItem 中。...如果我们创建了一个自定义的导航栏组件系统,它的调用顺序可能会与此不同。...现在我们的问题就来了,如何让导航栏的转场更加灵活且相互独立呢?...举个例子来说,当从 A 页面 push 到 B 页面的时候,转场库会保存 A 页面的导航栏样式,当 pop 回去后就会还原成以前的样式,因此我们不用考虑 pop 后导航栏样式会改变的情况,同时我们也不必考虑...导航栏内置组件的布局规范 导航栏里的组件布局在 iOS 11 后发生了改变,原有的一些解决方案已经失效,这些内容不在本篇文章的讨论范围之内,推荐阅读UIBarButtonItem 在 iOS 11 上的改变及应对方案

    2.4K30

    底牌项目中设置论坛中各个模块头图的代码

    w = WIDTH - 30 * IPHONE6_W_SCALE;                 h = w;             }else{  // 能够获取图片大小...                    w = WIDTH - 30 * IPHONE6_W_SCALE;                     h = w;                 }else{  // 能够获取图片大小...// 隐藏             imageView.hidden = YES;         }     } NSLog(@"allH%f", allH); } 简单说几句:之前的代码没有先请求头视图中所有图片的大小然后传递过去而是在设置装图片的视图的大小的时候进行了所有图片大小的网络请求...,在设置每个具体图片的大小进行了网络的请求,而且之前的图片大小请求方法会造成线程的阻塞,从而让各个模块在图片较多的情况下进行网络请求的时间较长而且不能与用户进行交互,用户体验并不好。...在使用改进之后的代码即以上的代码,页面在即使图片较多的情况下加载速度也很快,用户体验明显好了许多,连本人都满意了许多。

    55130

    教你步步为营掌握自定义 View

    当View所在的Activity进入stop状态后,View去哪了?如果我在一个后台线程中持有一个View的引用,我此时能够改变它的状态吗?为什么? View能够与其他的View交叉重叠吗?...为什么看了那么多文章,还是无法愉快地与自定义View玩耍?是那些文章不好吗?非也,是你没有掌握学习自定义View的正确姿势(即使你会很多姿势,也木有用,嘎嘎)。...(知己知彼,才好自定义!) 问题三:我要改变这个View的行为,外观,肯定是覆写View类中的方法,但是怎么覆写,覆写哪些方法能够改变哪些行为?...View完成与用户的交互后,能够自动隐藏,在需要交互的时候重新显示在屏幕上吗? ...... 现在我们就一点点来讲,学习的同时,最好能够用心体会Google工程师设计时的思路。 这样学习效果最好。...四、我要改变这个View的行为,外观,肯定是覆写View类中的方法,但是怎么覆写,覆写哪些方法能够改变哪些行为? 好了,View的位置和大小怎么确定我们都清楚了,现在,是时候开始自定义View了。

    79860

    【PageLayout】非常简单的一键切换加载-空数据-错误页,支持自定义

    项目中我们经常会用到的加载数据,加载完数据后显示内容,如果没有数据显示一个空白页,这是如果网络错误了显示一个网络错误页,自定义一个PageLayout。...网上也有一些开源的组件,大部分都是自定义继承某个布局在xml中让其作为跟布局,然后将自己的内容布局添加进去,效果也都不错,但是个人总觉得稍微有些麻烦,不是那么灵活,n多个xml布局都去定义,写的心烦,所以有了今天的主角...1.自定义一个布局让其作为跟布局 2.提供切换加载loading、空白页empty、错误页errror、内容页content功能 3.怎么让其取管理上边的四个页面?...4.其他 因为错误布局中一般都包括一个点击重试的功能,如果你需要自定义布局,你可以在配置PageLayout之前,设置好错误布局和点击事件,然后setError进去,同时也提供了一个默认方式的方法 fun...,所以并没有提供过多的自定义功能,如果你需要的话,你都可以提前设置好View,然后进行set 之前和同事讨论,xml形式和代码形式哪个更方便更灵活,这些都属于个人喜好吧,如果你更喜欢在xml里写的话,你可以进行改造

    76830

    Android性能优化系列之布局优化

    ("new Title"); 其正确的使用形式应该如下: // 使用include时设置的id,即R.id.my_title_ly View titleView = findViewById(R.id.my_foot_ly...networkErrorView = findViewById(R.id.network_error_layout); // 获取展开后的布局 注意: View 的可见性设置为 gone 后,在inflate...Profile GPU rendering 其次android系统还内置了Profile GPU rendering工具,这个工具也是在开发者选项中打开,它能够以柱状图的方式显示当前界面的渲染时间...,复杂点的可能是你的自定义的View嵌入了自定义的Path....现在看最终优化效果 OVERDRAWVIEW页面的问题 在overdrawviewactivity中只有一个自定义的图案,而这个自定义的图案引起了过度绘制的问题 解决方法 首先这个也是填充了整个

    1K20
    领券