UISplitViewController-分割控件自定义分割宽度是无法实现的

这篇文档主要说明,在分割控件的使用中,遇到的一些问题。

分割控件中,苹果官方给的一个方法,来控制弹出页面的方法。

self.contentSizeForViewInPopover = CGSizeMake(100.0, 600.0);

根据帮助文档说明,改方法来控制弹出的分割控件的尺寸大小。

但是,在实际应用中,却发先不起任何作用。纳闷啊。

原来,压根就不起作用,调试了很久,找了很久。最后得出的结论是:分割控件的控制视图是无法自定义大小的。

在苹果的方法中,虽然预留了这样的方法,但是实现不给力啊!设置无效啊!

所以,想要自定义分割控件页面大小的美好愿望是不能够满足的!

没兴趣知道原因的,就不用再往下看了!

结果知道了,到底为什么呢?如果有兴趣,可以看一下,到底发生了什么!开始探究!

仔细,查看这个方法的帮助文旦,发现这么一句话:

可见,表述是说明,该属性是可以设置弹出视图的大小的。

可是我进行设置:

self.splitViewController.contentSizeForViewInPopover=CGSizeMake(100.0, 600.0);

遗憾的是,并没有起任何作用。

于是乎,我顺藤摸瓜,看contentSizeForViewInPopover方法能为我们带来什么惊喜

contentSizeForViewInPopover

The size of the view controller’s view while displayed in a popover.

@property(nonatomic, readwrite) CGSize contentSizeForViewInPopover

Discussion

This property contains the desired size for the view controller when it is displayed in a popover. By default, the width is set to 320 points and the height is set to 1100 points. You can change these values as needed.

The recommended width for popovers is 320 points. If needed, you can return a width value as large as 600 points, but doing so is not recommended.

If the popover controller displaying the view controller sets its popoverContentSize property, the popover controller overrides the values set in the view controller’s contentSizeForViewInPopoverproperty.

从这一段代码中,我们知道,默认的弹出视图大小为320*1100.

并且推荐的是320的宽度,但是,可以设置成600,但是这是不推荐的。(可以没有说不允许啊)。

并且可以设置这个属性,但是,都没有成功。

但是 ,我有找到一个线索,UIPopoverController 的popoverContentSize属性能够控制弹出视图的大小,并且重写splitViewController.contentSizeForViewInPopover 属性的值,来改变大小。

答案还没出现,还得继续找!

如何设置 popoverContentSize 这个属性值呢?!

想到了,<</span>UISplitViewControllerDelegate>委托的方法。

// Called when a button should be added to a toolbar for a hidden view controller.

// Implementing this method allows the hidden view controller to be presented via a swipe gesture if ‘presentsWithGesture‘ is ‘YES‘ (the default).

- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController*)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc;

// Called when the view is shown again in the split view, invalidating the button and popover controller.

- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController*)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;

// Called when the view controller is shown in a popover so the delegate can take action like hiding other popovers.

- (void)splitViewController:(UISplitViewController *)svc popoverController:(UIPopoverController *)pc willPresentViewController:(UIViewController *)aViewController;

// Returns YES if a view controller should be hidden by the split view controller in a given orientation.

// (This method is only called on the leftmost view controller and only discriminates portrait from landscape.)

- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientationNS_AVAILABLE_IOS(5_0);

对这些委托方法,大概了解了一下后,于是我重写了全部方法,并设置了popoverContentSize属性值。

#pragma mark - Split view

// 苹果官方建议,当控制视图隐藏的时候,应该将一个按钮添加到toolbar上,这样可以控制“控制视图”的显示和隐藏

- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController*)popoverController

{

barButtonItem.title = NSLocalizedString(@"显示", @"显示");

[self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];

self.masterPopoverController = popoverController;

popoverController.popoverContentSize=CGSizeMake(500.0, 600.0);

}

// 苹果官方建议,当控制视图隐藏的时候,应该将一个按钮添加到toolbar上,这样可以控制“控制视图”的显示和隐藏

// 当“控制视图”在分割视图上显示时,将调用该方法。

// Called when the view is shown again in the split view, invalidating the button and popover controller.

- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem

{

_masterPopoverController.popoverContentSize=CGSizeMake(500.0, 600.0);

}

// 根据iPad方向,来控制,是否隐藏“控制视图”,默认的是允许。即竖着(肖像)模式时,隐藏;横着(风景)模式时,显示

- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation{

return YES;

}

遗憾的是,根本就没有没有实现重定义分割视图的大小!

研究到此终止吧。不要在纠结改变UISplitViewController宽度的的事情上了,还有很多事情等着我们去做!

但是,总要有个结论吧。

既然,官方给出的控件不行,那只有自造吧。在View中放入两个View做协调是个不错的办法啊。也只有这样了,自己动手造车!

也在网上,看到一个牛人写的自定义分割视图,原理也是自己重绘的界面!(看来,也许真的不支持)。又找到一个苹果的Bug啊。

改休息了。晚安!(死了心,也就睡的好了,纠结了2天的无言结局)!

时间: 2024-10-12 17:25:25

UISplitViewController-分割控件自定义分割宽度是无法实现的的相关文章

VS对话框按钮贴图和Static控件自定义

软件开发中,为了让用户更喜欢使用我们的软件,除了具有良好的性能外,还需要美观的界面. 本文简单地介绍下对话框背景贴图和按钮贴图,以及Static控件自定义成各种Static效果. 首先贴个图,让大家看看效果 1.新建对话框应用程序 2.添加图片资源 3.背景贴图 重写OnPaint函数 void CDlgBmpTestDemoDlg::OnPaint() { CPaintDC dc(this); // 用于绘制的设备上下文 //绘制背景 CBitmap bitmap; bitmap.LoadBi

WPF的ListView控件自定义布局用法实例

本文实例讲述了WPF的ListView控件自定义布局用法.分享给大家供大家参考,具体如下: 概要: 以源码的形式贴出,免得忘记后,再到网上查资料.在VS2008+SP1环境下调试通过 引用的GrayscaleEffect模块,可根据参考资料<Grayscale Effect...>中的位置下载. 正文: 如何布局是在App.xaml中定义源码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

android控件---自定义带文本的ImageButton

由于SDK提供的ImageButton只能添加图片,不能添加文字:而Button控件添加的文字只能显示在图片内部:当我们需要添加文字在图片外部时就不能满足我们的需求了,顾只能自己写个自定义ImageButton.说是ImageButton,其实并不是继承于ImageButton,而是从LinearLayout继承,由于LinearLayout是线性排列,通过setOrientation(LinearLayout.VERTICAL)的方式达到View垂直排列的目的,所以很简单,只需要添加两个Vie

【Android的从零单排开发日记】之入门篇(十四)——Button控件+自定义Button控件

    好久不见,又是一个新的学期开始了,为什么我感觉好惆怅啊!这一周也发生了不少事情,节假日放了三天的假(好久没有这么悠闲过了),实习公司那边被组长半强制性的要求去解决一个后台登陆的问题,结果就是把Android这块放在一边了,滚去看PHP的后台框架了(人家只是一个Android实习生,不带这么玩的),学校那边老师布置了一个hibernate的项目,还说我给你们一个月时间,慢慢看,慢慢学习(结果就是在群上发了一大堆的hibernate的视频教程,还真的是慢慢看慢慢学习了,而且视频还是极老的,h

梦想CAD控件自定义实体实现

一.增加自定义实体对象 调用DrawCustomEntity函数,绘制一个自定义实体对象. 下面代码绘制一个自定义实体,C#代码实现如下: private void DrawMlineCommand() {     MxDrawUiPrPoint getPt = new MxDrawUiPrPoint();     getPt.message = "点取第一点";     if (getPt.go() != MCAD_McUiPrStatus.mcOk)     {         r

WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展

一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 日历控件Calendar自定义样式: 日期控件DatePicker自定义样式,及Label标签.水印.清除日期功能扩展: 二.Calendar自定义样式 先看看效果: 从上面图可以看出,日历的显示其实有三种状态,如下面的分解图: "日"部分的显示: "月"部分的显示: &qu

C# winform 分页控件 datagridview列宽度自适应

版权归原作者(伍华聪)所有. VS2019 .Net FrameWork 4.7.2 1.修改按钮上文字,调整按钮大小.修改按钮和文本框字体为Microsoft Sans Serif, 9pt”,字体电脑中都有,可以尽量水平和垂直居中. 2.因为没有文档,导出excel总不成功,取消掉了导出按钮. 3.修改分页控件水平居中. 下载 视频 4.datagridview列宽度自适应 using System; using System.Collections.Generic; using Syste

repeater控件自定义Url分页带参数

repeater控件的效果图如下: 该页面实现的功能如下: 1.上下分页,(也可以带首页和末页,我只是禁掉了没用) 2.根据用户输入的指定分页索引进行跳转 3.根据筛选数据的参数进行URL分页的参数传递 4.数据的导出功能 前台代码: <!--表格具体内容--> <div class="table-box"> <table> <thead> <tr> <th>编号</th> <th>姓名&l

Android ProgressDialog 控件自定义

在项目中,我们经常需要通过网络请求去服务端获取相应的数据,以便于在客户端进行展示.而这个过程是需要网络的,因此就有了等待的过程.对于网络快的童靴,那么等待的时间就短:而对于网络慢的童靴,那么等待的时间就长.因此为了消除童靴们等待的焦虑感,我们需要显示一个progress dialog来提示童靴们,数据正在获取中,请稍候片刻. 先上效果图,效果图如下:     那么如何实现呢?直接上代码 1. 在anim文件夹下创建sf_progress_dialog_anim.xml,实现转动的效果: <?xm