在 iOS 9 中,如果对页面使用 class 而不是 UIViewController,我如何创建约束以避免破坏状态 and/or 标签栏?
In iOS 9, if using a class other than UIViewController for a page, how can I create a constraint to avoid clobbering the status and/or tab bars?
所有指南都建议调整顶部布局指南以避免破坏状态栏。但是,如果页面是使用 UIViewController 以外的视图控制器创建的(例如,如果它是使用 UITableViewController 创建的,因为页面主要是 table 视图),则它没有布局指南。我怎样才能避免状态栏?
我发现 UITableViewController 比它的价值更麻烦,就像这个人:How do I make my iOS7 UITableViewController NOT appear under the top status bar?
现在,当我实现 table 视图时,我发现将 TableView 设为 UIViewController 的 属性 更容易,然后将委托和数据源职责设置为 UIViewController。从那里您可以根据需要自定义它。您可以使用状态栏设置(推断、None、黑色等)等 Storyboard 选项,但根据我的经验,我发现将 UITableView 放入 UIViewController 中效果最佳。
示例Header:
@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *myTableView;
控制器中的示例代码
@synthesize myTableView;
//**** Table View Delegate and Data Source ****//
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *myCellIdentifier = @"myCell";
MyTableViewCell *cell = (MyTableViewCell *)[myTableView dequeueReusableCellWithIdentifier:myCellIdentifier];
//Customize the cell
return cell;
}
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
return [myDataSource count];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//perform some action on click
}
没有 NavigationController 的 UITableViewController 的另一个例子和状态栏的问题:iOS 7: UITableView shows under status bar
一个UITableViewController
(以及所有其他标准视图控制器)继承自UIViewController
,因此它们具有UIViewController
的所有属性和方法,包括顶部和底部布局指南,绝对可以用。
由于UITableViewController继承自UIViewController,那么在Tableviewcontroller中,可以重写该方法
- (UIStatusBarStyle)preferredStatusBarStyle {
if(<#condition>)
{
return UIStatusBarStyleLightContent;
}
else
{
return UIStatusBarStyleDefault;
}
}
如果你必须使用 UITableViewController,你可以将它嵌入到带有 Embed Segue 的 UIViewController 中,然后在 UIViewController 中做任何你想做的事情
所有指南都建议调整顶部布局指南以避免破坏状态栏。但是,如果页面是使用 UIViewController 以外的视图控制器创建的(例如,如果它是使用 UITableViewController 创建的,因为页面主要是 table 视图),则它没有布局指南。我怎样才能避免状态栏?
我发现 UITableViewController 比它的价值更麻烦,就像这个人:How do I make my iOS7 UITableViewController NOT appear under the top status bar?
现在,当我实现 table 视图时,我发现将 TableView 设为 UIViewController 的 属性 更容易,然后将委托和数据源职责设置为 UIViewController。从那里您可以根据需要自定义它。您可以使用状态栏设置(推断、None、黑色等)等 Storyboard 选项,但根据我的经验,我发现将 UITableView 放入 UIViewController 中效果最佳。
示例Header:
@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *myTableView;
控制器中的示例代码
@synthesize myTableView;
//**** Table View Delegate and Data Source ****//
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *myCellIdentifier = @"myCell";
MyTableViewCell *cell = (MyTableViewCell *)[myTableView dequeueReusableCellWithIdentifier:myCellIdentifier];
//Customize the cell
return cell;
}
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
return [myDataSource count];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//perform some action on click
}
没有 NavigationController 的 UITableViewController 的另一个例子和状态栏的问题:iOS 7: UITableView shows under status bar
一个UITableViewController
(以及所有其他标准视图控制器)继承自UIViewController
,因此它们具有UIViewController
的所有属性和方法,包括顶部和底部布局指南,绝对可以用。
由于UITableViewController继承自UIViewController,那么在Tableviewcontroller中,可以重写该方法
- (UIStatusBarStyle)preferredStatusBarStyle {
if(<#condition>)
{
return UIStatusBarStyleLightContent;
}
else
{
return UIStatusBarStyleDefault;
}
}
如果你必须使用 UITableViewController,你可以将它嵌入到带有 Embed Segue 的 UIViewController 中,然后在 UIViewController 中做任何你想做的事情