我有一个带有UISplitViewController的应用程序,当我在potrait模式下启动应用程序时,它缺少"Group"UIBarButtonItem.我需要转向横向模式并返回potrait以使其显示.当我以横向模式启动时它就在那里.这是一些明确的屏幕截图:
这是在纵向模式下启动应用程序的时间

从纵向模式旋转后,这是横向模式:

这是从横向模式旋转回纵向模式后:
我的UISplitViewController基本上就像一个魅力,除了在第一次(仅第一次!)从主表视图转换到详细视图时显示一个恼人的错误消息.
Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x160015600>.
Run Code Online (Sandbox Code Playgroud)
主视图和详细视图控制器都嵌入在一个UINavigationController.但是,只有在设置以下内容时才会出现错误(这是iPhone上逻辑行为所必需的):
class MySplitViewController: UISplitViewController, UISplitViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
return true
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人能提供这个问题的解决方案,那将是非常好的,在此先感谢.
BTW:拆分视图控制器已在故事板中设置
呈现详细视图控制器的tableView:didSelectRowAtIndexPath:方法如下:
if let detailViewController = delegate as? DetailViewController {
detailViewController.navigationItem.leftItemsSupplementBackButton = true
detailViewController.navigationItem.leftBarButtonItem = splitViewController!.displayModeButtonItem()
splitViewController!.showDetailViewController(detailViewController.navigationController!, sender: self)
}
Run Code Online (Sandbox Code Playgroud) 我有一个现有的iPhone应用程序,我正在添加一个UISplitViewController.iPad部分就像一个魅力,但我有一个保证与iPhone 6(S)Plus崩溃.
设置 - 主人是UITabBarController.初始细节是带有占位符徽标视图的视图.选择对象后,将细节替换为a UITabBarController.
每当我选择一个项目并打开iPhone 6 Plus中的细节并将其从纵向(仅详细可见)旋转到横向(主人可见的位置)时,它会崩溃.使用占位符详细信息视图旋转时不会发生这种情况.
在崩溃之前,它确实调用了委托方法primaryViewControllerForExpandingSplitViewController和splitViewController(splitViewController: UISplitViewController, separateSecondaryViewControllerFromPrimaryViewController.但是,iPad上的一切正常.
我已经做了大量的搜索,只看到几个推特提到这种类型的崩溃.设置或不设置的displayModeButtonItem事情没有帮助.
我在一个新项目中重新创建了这个崩溃 - 它可以在这里下载:https: //github.com/sschale/SplitViewCrash/
崩溃日志:
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00007fff53609ff8
Exception Note: EXC_CORPSE_NOTIFY
VM Regions Near 0x7fff53609ff8:
MALLOC_TINY 00007f8405000000-00007f8405300000 [ 3072K] rw-/rwx SM=PRV
--> STACK GUARD 00007fff4fe0a000-00007fff5360a000 [ 56.0M] ---/rwx SM=NUL stack guard for thread 0
Stack 00007fff5360a000-00007fff53dff000 [ 8148K] rw-/rwx SM=COW thread 0 …Run Code Online (Sandbox Code Playgroud) 我试图在我的iPad应用程序中显示一个UISplitViewController,将其显示为模态视图控制器.我设法显示它,但由于某种原因,模态视图左侧有一个间隙,状态栏的大小也会在方向更改时保留.

有人知道为什么会这样吗?或者如果这是可能的话?也许我只是在挖自己一个巨大的洞.
我正在创建一个带有splitview的iPad应用程序,这是屏幕截图,
在这一个中,当我更改masterview控制器(左侧)中的选项卡时,我想更新右侧tableview中的值.这将是一个很好的方法,我应该为每个标签更改加载另一个viewcontroller吗?可能吗?或者只是更新表格?对于所有选项卡更改,我想显示包含不同数据的tableview.我使用下面的代码,我可以看到日志中的更改,但表没有得到更新.
- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
[_detailItem release];
_detailItem = [newDetailItem retain];
// Update the view.
[self configureView];
}
if (self.masterPopoverController != nil) {
[self.masterPopoverController dismissPopoverAnimated:YES];
}
}
- (void)configureView
{
// Update the user interface for the detail item.
if (isStudent) {
textStr = @"student";
NSLog(@"Student....%@",textStr);
[self.tableView reloadData];
}if (isTeachers) {
textStr = @"teacher";
NSLog(@"Teacher....%@",textStr);
[self.tableView reloadData];
}if (isPreference) {
textStr = @"preference";
NSLog(@"Preference....%@",textStr);
[self.tableView reloadData];
}if (isConfiguration) {
textStr = @"configuration";
NSLog(@"Configuration....%@",textStr);
[self.tableView reloadData]; …Run Code Online (Sandbox Code Playgroud) 我有一个iPad应用程序,它使用UISplitViewController(左侧是UITableView,右侧是详细视图).点击它时,我的表格视图会以蓝色突出显示所选单元格.
当我调用以下方法时,单元格被选中但不以蓝色突出显示:
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
Run Code Online (Sandbox Code Playgroud)
我花了很多时间来处理各种委托方法和黑客试图让单元格以编程方式突出显示,就好像它已被挖掘一样.我不能这样做.
我已经设法几乎到达那里:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (shouldHighlightCell)
{
NSIndexPath *indexPathForCellToHighlight = [NSIndexPath indexPathForRow:0 inSection:0];
if ([indexPath isEqual:indexPathForCellToHighlight])
{
cell.selected = YES;
shouldHighlightCell = NO;
}
}
}
Run Code Online (Sandbox Code Playgroud)
只要我也有这个功能,它就可以正常工作(否则即使在点击另一个单元时它仍保持选中状态):
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0];
if ([[self.tableView cellForRowAtIndexPath:ip] isSelected])
{
[[self.tableView cellForRowAtIndexPath:ip] setSelected:NO];
}
NSIndexPath *iToTheP = indexPath;
return iToTheP;
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个奇怪而复杂的解决方法.我不介意,但它甚至没有完全发挥作用.如果选定的单元格在屏幕上滚动,则会丢失其突出显示,而在屏幕上滚动时,已点击的单元格仍会突出显示.
我对这一点感到非常困惑.我确信这种解决方法甚至不是必需的,有一个更简单的解决方案.
我有一个简单的iPad应用程序,MasterviewController有一个tableview和一个包含UIWebView的DetailViewController.然后我在我的Storyboard中拖放了一个SplitViewController,将它与我的Master和Detail控制器连接起来.在MasterViewController中我使用以下内容:
- (void) awakeFromNib
{
self.splitViewController.delegate = self;
}
- (BOOL) splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
return NO;
}
Run Code Online (Sandbox Code Playgroud)
目前看起来如下:

一切都很好.我想要做的是使用DetailViewController左上角的按钮隐藏和取消隐藏MasterViewController,就像iPad Mail应用程序一样.
我发现了一些与此问题相关的问题,但他们并没有像我一样只是在Storyboard中拖动它并编写几行代码来创建SplitView,所以不要将它标记为重复或类似的东西.
注意:请不要建议使用MGSplitViewController或任何其他第三方库.提前致谢.
MasterViewController嵌入在导航控制器中.虽然DetailViewController上面有一个手动添加的顶栏,因为当在SplitView中添加全部内容时,它会丢失顶部的导航栏.我所知道的是,我可以在DetailView的顶部栏上创建一个IBAction按钮,但不知道如何触发隐藏和取消隐藏功能.
我试图添加splitview控制器作为子视图控制器.父视图控制器是导航控制器.导航栏对于父视图控制器是隐藏的,我想将状态栏显示为iOS 6标准.我已经将splitview控制器添加为子视图控制器,因为我想从splitview控制器推送到另一个视图控制器.
我面临的问题是当我添加splitview控制器时,状态栏重叠在内容上.将edgesForExtendedLayout设置为UIRectEdgeNone for masterview,detailview,parentview,splitview似乎不起作用.
请让我知道我可以应用的解决方案,以防止内容重叠状态栏和显示状态栏为ios 6标准.
我尝试使用MGSplitViewController,但面临同样的问题.
谢谢.
我仍在尝试找到理论上非常简单的任务的解决方案,从UIViewController到Split View Controller.(为什么苹果这么难吃).
我现在处于一个阶段,我现在将SplitViewController放入自己的故事板中.当用户选择单个UIView控制器上的按钮时,我调用以下代码:
UISplitViewController *splitVC = [[UIStoryboard storyboardWithName:@"SplitStoryBoard" bundle:nil] instantiateViewController];
[self presentViewController:splitVC animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
所以我想用splitview控制器加载故事板.但这也与"应用程序试图以模态方式呈现拆分视图控制器"崩溃
我没有在代码中指定任何"模态"操作.
有没有解决方法怎么做?
我UISplitViewController在 iOS 13 上有一个奇怪的错误(它在 iOS 12 上运行良好)。我创建了一个简单的项目来重现这个错误。
final class SplitViewController: UISplitViewController {
override public func viewDidLoad() {
super.viewDidLoad()
preferredDisplayMode = .allVisible
delegate = self
expandMasterView()
}
private func expandMasterView() {
preferredPrimaryColumnWidthFraction = 1
let screenSize = UIScreen.main.bounds.size
maximumPrimaryColumnWidth = max(screenSize.width, screenSize.height)
}
}
extension SplitViewController: UISplitViewControllerDelegate {
func splitViewController(_ splitViewController: UISplitViewController,
collapseSecondary secondaryViewController: UIViewController,
onto primaryViewController: UIViewController) -> Bool {
return true
}
}
Run Code Online (Sandbox Code Playgroud)
每当我加载 时SplitViewController,我都想将 扩展MasterViewController到全UIScreen …