# Implement banner ads in iOS

> Implement banner ads in your iOS app. Create and display banner view objects within your view hierarchy, and use a delegate to manage ad events.

> **Important:**
>
> [app-ads.txt](/monetization/dashboard/app-ads-txt.md) is an [IAB](https://www.iab.com/) initiative to combat fraud and create transparency in the advertising ecosystem. Ensure that you implement app-ads.txt as described. Otherwise, banner demand might significantly decrease.

Banner ads require a specific type of dedicated banner Ad Unit.

You can place the banner view object into your view hierarchy, just like you would any other view. This allows you to customize the position of each banner instance, or display multiple banners.

> **Note:**
>
> Banner content will not render outside of the Safe Area, as described in [Apple's guidelines](https://developer.apple.com/documentation/uikit/uiview/positioning_content_relative_to_the_safe_area).

## Script implementation

Add your banner code in the `ViewController` implementation (`.m`). The following script sample is an example implementation for displaying two banner ads on the screen. For more information on the classes referenced, refer to the `UADSBannerView` API section.

### Implementing the MREC banner format

> **Note:**
>
> You must [initialize](/monetization/sdk-integration/ios-sdk/initialize-sdk.md) Unity Ads before displaying a banner ad.

To display a medium rectangle (MREC) sized ad format in your app, ensure the proper dimensions are used, such as 300x250, 300x300, or 450x450. In the case of a 300x250 MREC banner ad specifically, replace this in the following example code:

```objective-c
CGSizeMake(320, 50)
```

With this adjusted dimension:

```objective-c
CGSizeMake(300, 250)
```

#### Banner ad example

1. **Objective-C**

   ```objective-c
   @interface ViewController () <UADSBannerViewDelegate>
   ​
   // This is the Ad Unit or Placement that will display banner ads:
   @property (strong) NSString* placementId;
   // This banner view object will be placed at the top of the screen:
   @property (strong, nonatomic) UADSBannerView *topBannerView;
   // This banner view object will be placed at the bottom of the screen:
   @property (strong, nonatomic) UADSBannerView *bottomBannerView;
   ​
   @end
   ​
   @implementation ViewController
   ​
   - (void)viewDidLoad {
       [super viewDidLoad];
       self.placementId = @"banner";
       [UnityAds initialize: @"1234567" testMode: YES initializationDelegate: self];
   }
   ​
   // Example method for creating and loading the top banner view object:
   - (void)loadTopBanner{
       // Instantiate a banner view object with the Ad Unit ID and size:
       self.topBannerView = [[UADSBannerView alloc] initWithPlacementId: _placementId size: CGSizeMake(320, 50)];
       // Set the banner delegate for event callbacks:
       self.topBannerView.delegate = self;
       // Add the banner view object to the view hierarchy:
       [self addBannerViewToTopView:self.topBannerView];
       // Load ad content to the banner view object:
       [_topBannerView load];
   }
   ​
   // Example method for creating and loading the bottom banner view object:
   - (void)loadBottomBanner{
       self.bottomBannerView = [[UADSBannerView alloc] initWithPlacementId: _placementId size: CGSizeMake(320, 50)];
       self.bottomBannerView.delegate = self;
       [self addBannerViewToBottomView:self.bottomBannerView];
       [_bottomBannerView load];
   }
   ​
   // Example method for discarding the top banner view object (for example, if there's no fill):
   - (void)unLoadTopBanner{
       // Remove the banner view object from the view hierarchy:
       [self.topBannerView removeFromSuperview];
       // Set it to nil:
       _topBannerView = nil;
   }
   ​
   // Example method for discarding the bottom banner view object:
   - (void)unLoadBottomBanner{
       [self.bottomBannerView removeFromSuperview];
       _bottomBannerView = nil;
   }
   ​
   ​// Example method for placing the top banner view object:
   - (void)addBannerViewToTopView:(UIView *)bannerView {
       bannerView.translatesAutoresizingMaskIntoConstraints = NO;
       [self.view addSubview:bannerView];
       [self.view addConstraints:@[
           [NSLayoutConstraint constraintWithItem:bannerView
                                       attribute:NSLayoutAttributeTop
                                       relatedBy:NSLayoutRelationEqual
                                           toItem:self.topLayoutGuide
                                       attribute:NSLayoutAttributeBottom
                                       multiplier:1
                                         constant:0],
           [NSLayoutConstraint constraintWithItem:bannerView
                                       attribute:NSLayoutAttributeCenterX
                                       relatedBy:NSLayoutRelationEqual
                                           toItem:self.view
                                       attribute:NSLayoutAttributeCenterX
                                       multiplier:1
                                         constant:0]
       ]];
   }

   ​// Example method for placing the bottom banner view object:
   - (void)addBannerViewToBottomView: (UIView *)bannerView {
       bannerView.translatesAutoresizingMaskIntoConstraints = NO;
       [self.view addSubview:bannerView];
       [self.view addConstraints:@[
           [NSLayoutConstraint constraintWithItem:bannerView
                                       attribute:NSLayoutAttributeBottom
                                       relatedBy:NSLayoutRelationEqual
                                           toItem:self.bottomLayoutGuide
                                       attribute:NSLayoutAttributeTop
                                       multiplier:1
                                         constant:0],
           [NSLayoutConstraint constraintWithItem:bannerView
                                       attribute:NSLayoutAttributeCenterX
                                       relatedBy:NSLayoutRelationEqual
                                           toItem:self.view
                                       attribute:NSLayoutAttributeCenterX
                                       multiplier:1
                                         constant:0]
       ]];
   }

   ​// Implement the delegate methods:
   #pragma mark : UADSBannerViewDelegate

   - (void)bannerViewDidLoad:(UADSBannerView *)bannerView {
       // Called when the banner view object finishes loading an ad.
       NSLog(@"Banner loaded for Ad Unit or Placement: %@", bannerView.placementId);
   }

   - (void)bannerViewDidClick:(UADSBannerView *)bannerView {
       // Called when the banner is clicked.
       NSLog(@"Banner was clicked for Ad Unit or Placement: %@", bannerView.placementId);
   }

   - (void)bannerViewDidLeaveApplication:(UADSBannerView *)bannerView {
       // Called when the banner links out of the application.
   }


   - (void)bannerViewDidError:(UADSBannerView *)bannerView error:(UADSBannerError *)error{
       // Called when an error occurs showing the banner view object.
       NSLog(@"Banner encountered an error for Ad Unit or Placement: %@ with error message %@", bannerView.placementId, [error localizedDescription]);
       // Note that the UADSBannerError can indicate no fill (refer to the API documentation).
   }
   @end
   ```

**Next steps**: Review the [monetization strategy](/monetization/getting-started/monetization-strategy.md) guide and [test your implementation](/monetization/sdk-integration/ios-sdk/test-integration.md).
