Gison George
Gison George

Reputation: 379

Hide "Show More" button from Today widget in iOS10

I am building an iOS Today widget, and while testing for iOS 10, I see a "Show More" / "Show Less" button on the top right of the widget header. How can I remove this button? I am using Objective-C.

Upvotes: 11

Views: 7405

Answers (6)

iPhoneDeveloper
iPhoneDeveloper

Reputation: 996

Placing this line of code inside the widgetActiveDisplayModeDidChange delegate method solved my problem.

[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];

If you wanna hide the show more/ show less option replace NCWidgetDisplayModeExpanded with NCWidgetDisplayModeCompact.

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode
                         withMaximumSize:(CGSize)maxSize {

    [self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];

}

Upvotes: 0

CharlesAE
CharlesAE

Reputation: 923

I know the original post mentions using objective-c but in the event anyone needs the swift answer, here it is

override func viewDidLoad()
{
    super.viewDidLoad()
    self.extensionContext?.widgetLargestAvailableDisplayMode = .compact
}

When set to compact, the app will only support compact mode i.e. show less/show show buttons/functionality will be gone.

here's some documentation for more info

Upvotes: 1

Moxarth
Moxarth

Reputation: 303

In iOS 10, as far as I know, the show more option is new and we cannot remove it, but we can modify it as needed.

The following code will allow you to automatically size the Today widget. Just change the table or collection view or whatever you used in your project.

static CGFloat padding = 25.0;

- (void)viewDidLoad 
{
    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.

    // This will remove extra separators from tableview
    self.articleTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

    // Add the iOS 10 Show More ability
    [self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
}

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize {
   if (activeDisplayMode == NCWidgetDisplayModeCompact){
       // Changed to compact mode
       self.preferredContentSize = maxSize;
   }
   else{
       // Changed to expanded mode
       self.preferredContentSize = CGSizeMake(self.articleTableView.contentSize.width, self.articleTableView.contentSize.height + padding);
   }
}

Upvotes: 11

Peter Lapisu
Peter Lapisu

Reputation: 21005

Sadly you cannot hide it and should conform to the

widgetActiveDisplayModeDidChange:withMaximumSize:

widgets that doesn't show this control were not build for iOS10

Upvotes: 2

jervine10
jervine10

Reputation: 3077

In viewDidLoad you can set the largest available display mode.

[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeCompact];

This will remove the Show More/Less button, but it may not be what you want. The maximum allowed size for the compact view is fairly small.

You can implement:

-(void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize

to update your preferredContentSize. The maxSize parameter will be the maximum allowed size for the activeDisplayMode.

Upvotes: 10

dispatchswift
dispatchswift

Reputation: 1056

-[NCWidgetProviding widgetActiveDisplayModeDidChange:withMaximumSize:]

Is probably what you're looking for, I would reference this

Upvotes: 2

Related Questions