11

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.

Pang
  • 9,564
  • 146
  • 81
  • 122
Gison George
  • 379
  • 1
  • 3
  • 15

6 Answers6

11

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);
   }
}
Pang
  • 9,564
  • 146
  • 81
  • 122
Moxarth
  • 303
  • 4
  • 13
  • I have used this as reference --> https://github.com/sighmon/NI-ipad/blob/master/New%20Internationalist%20Magazine%20Australia%20Extension/TodayViewController.m – Moxarth Oct 24 '16 at 05:26
  • It is possible to remove the 'Show More' button... see below. – MobileVet Jan 16 '17 at 18:46
10

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.

jervine10
  • 3,039
  • 22
  • 35
  • Thanks Jervine - This is working for me, but my actual need is that - i don't want Show more/less button in Expanded mode. Is there any way to hide the button in the expanded mode. – Gison George Aug 10 '16 at 14:37
  • The quick test I ran had it hide the button when setting the AvailableDisplayMode to `NCWidgetDisplayModeCompact` – jervine10 Aug 10 '16 at 17:28
  • Any luck? It must be possible since I have apps on my iphone with expanded mode by default without show less/more button – Adam Bardon Oct 05 '16 at 21:09
2
-[NCWidgetProviding widgetActiveDisplayModeDidChange:withMaximumSize:]

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

dispatchswift
  • 1,046
  • 9
  • 21
2

Sadly you cannot hide it and should conform to the

widgetActiveDisplayModeDidChange:withMaximumSize:

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

Peter Lapisu
  • 19,915
  • 16
  • 123
  • 179
1

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

CharlesAE
  • 907
  • 12
  • 16
0

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];

}
iPhoneDeveloper
  • 958
  • 1
  • 14
  • 23