---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ads.yandex.com/helpcenter/en/dev/ios/adaptive-inline-banner.md
  - https://ads.yandex.com/helpcenter/pt/dev/ios/adaptive-inline-banner.md
  - https://ads.yandex.com/helpcenter/ru/dev/ios/adaptive-inline-banner.md
  - https://ads.yandex.com/helpcenter/zh/dev/ios/adaptive-inline-banner.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ads.yandex.com/helpcenter/zh/llms.txt

# 自适应内联横幅

<!-- source: zh/dev/_includes/adaptive-inline-banner.md -->
自适应内嵌横幅广告是一种灵活的横幅广告格式，通过针对每台设备优化广告尺寸，确保投放效果达到最优。
<!-- endsource: zh/dev/_includes/adaptive-inline-banner.md -->

<!-- source: zh/dev/_includes/adaptive-inline-banner.md -->
借助这种广告类型，开发者可设置广告允许的最大宽度和高度，系统将自动确定最佳广告尺寸。为了选择最佳广告尺寸，自适应内嵌横幅广告采用最大高度而非固定高度，这有助于提升广告表现。
<!-- endsource: zh/dev/_includes/adaptive-inline-banner.md -->

通常，这种格式在基于内容来源的应用或允许主要关注广告的上下文环境中使用。

{% cut "外观" %}

<img src="https://yastatic.net/s3/doc-binary/src/docs/support/mobile-ads/zh/monetization/_images/banner-inline-zh-ex.png" width="200">

{% endcut %}

本指南展示了如何将自适应内联横幅集成到 iOS 应用中。
除了代码示例和说明之外，它还包含特定格式的建议和其他资源的链接。


## 前提条件 {#pre}

<!-- source: zh/dev/_includes/pre-ios.md -->
1. 请按照 [快速入门](https://ads.yandex.com/helpcenter/zh/dev/ios/quick-start.md) 中描述的 SDK 集成步骤进行操作。
2. 提前 [初始化](https://ads.yandex.com/helpcenter/zh/dev/ios/quick-start.md#init) 您的广告 SDK。
3. 确保您运行的是最新的 [Yandex Mobile Ads SDK](https://ads.yandex.com/helpcenter/zh/dev/platforms.md) 版本。如果您使用聚合，请同时确保您运行的是最新版本的 [统一构建](https://ads.yandex.com/helpcenter/zh/dev/platforms.md)。
<!-- endsource: zh/dev/_includes/pre-ios.md -->

## 实施 {#implement}

集成自适应内联横幅的关键步骤：

- 创建一个 AdView 类实例。
- 实施委托方法。
- 加载广告。
- 如果您使用 Adfox，请传递 [其他设置](https://ads.yandex.com/helpcenter/zh/dev/ios/target-adfox.md)。
- 在委托方法中接收广告并进行呈现。

## 自适应内联横幅集成的特点 {#features}

1. 所有调用 Yandex Mobile Ads SDK 方法的操作必须在主线程中完成。

2. 我们强烈建议您不要在 `func adViewDidFailLoading(_ adView: AdView, error: Error)` 委托方法中收到错误时尝试加载新广告。如果您需要从 `func adViewDidFailLoading(_ adView: AdView, error: Error)`，加载广告，请限制广告加载重试，以避免由于网络连接限制而重复出现失败的广告请求。

3. 为了确保自适应内联横幅正常工作，请使用 [自动布局](https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/AnatomyofaConstraint.html)。对视图使用固定大小的框架可能会导致广告呈现不正确。

4. 自适应内联横幅在使用所有可用宽度时效果最佳。通常情况下，这是设备屏幕的全宽度。确保包括适用于您的应用的所有填充和安全显示区域。

5. 自适应内联横幅设计用于放置在可滚动内容中。广告的高度可以与设备屏幕相同，也可以限制为最大高度，具体取决于 API。

6. 要获取广告尺寸，请使用 `BannerAdSize.inlineSize(withWidth: CGFloat, maxHeight: CGFloat)` 方法，传递广告容器的可用宽度和允许的最大广告高度作为参数。

7. `BannerAdSize` 对象是通过`BannerAdSize.inlineSize(withWidth: CGFloat, maxHeight: CGFloat)` 方法计算的，其中包含相同设备的广告宽度和高度的常量值。在特定设备上测试应用布局后，您可以确定广告尺寸将保持不变。

## 创建 AdView 类实例

要显示横幅广告，请创建一个 `AdView` 类实例，并将广告尺寸和广告 ID 传递给它。您还需要通过为您的类实施 `AdViewDelegate` 协议来定义 `AdView` 的委托。

设备适用的广告是使用 `BannerAdSize.inlineSize(withWidth: CGFloat, maxHeight: CGFloat)` SDK 方法计算的。作为参数，传递广告容器的最大允许宽度。我们建议使用设备屏幕的整个宽度或父容器的宽度。确保包括适用于您的应用的所有填充和安全显示区域。

您将需要来自 Yandex Advertising Network 界面 (adUnitId) 的广告单元 ID。

在视图控制器中创建 `AdView` 实例的示例：

```swift
final class InlineBannerViewController: UIViewController {
    private lazy var adView: AdView = {
        let adSize = BannerAdSize.inlineSize(withWidth: 320, maxHeight: 320)

        let adView = AdView(adUnitID: "R-M-XXXXX-YY", adSize: adSize)
        adView.delegate = self
        adView.translatesAutoresizingMaskIntoConstraints = false
        return adView
    }()
}

extension InlineBannerViewController: AdViewDelegate {
    func adViewDidLoad(_ adView: AdView) {
        // 加载成功后将调用该方法
    }

    func adViewDidFailLoading(_ adView: AdView, error: Error) {
        // 加载广告时出现任何错误后将调用此方法
    }
}
```

## 加载广告

创建 `AdView` 后，需要加载广告。

要在广告加载或加载失败时发出通知并跟踪自适应内联横幅的生命周期，您需要为 `AdView` 类对象设置委托属性并实施 `AdViewDelegate` 协议。

您可以通过 `AdRequest` 传递用户兴趣、上下文页面数据、位置详细信息或其他信息来扩展广告请求参数。在请求中提供额外的上下文数据可以显著提高您的广告质量。请参阅[广告定位](https://ads.yandex.com/helpcenter/zh/dev/ios/target.md)版块了解更多信息。

以下示例展示了如何加载自适应内联横幅。加载成功后，将调用 `AdViewDelegate` 委托的 `func adViewDidLoad(_ adView: AdView)` 方法。

```swift
final class InlineBannerViewController: UIViewController {
    private lazy var adView: AdView = {
        let adSize = BannerAdSize.inlineSize(withWidth: 320, maxHeight: 320)

        let adView = AdView(adUnitID: "R-M-XXXXX-YY", adSize: adSize)
        adView.delegate = self
        adView.translatesAutoresizingMaskIntoConstraints = false
        return adView
    }()

    func loadAd() {
        adView.loadAd()
    }
}
```

## 展示广告

成功加载广告后，您需要对其进行呈现。为此，您可以使用自动布局约束。
获取从委托方法获得的 adView 并将其添加到容器中。然后添加自动布局约束，以便横幅显示在您想要的位置。

```swift
final class InlineBannerViewController: UIViewController {
    private lazy var adView: AdView = {
        let adSize = BannerAdSize.inlineSize(withWidth: 320, maxHeight: 320)

        let adView = AdView(adUnitID: "R-M-XXXXX-YY", adSize: adSize)
        adView.delegate = self
        adView.translatesAutoresizingMaskIntoConstraints = false
        return adView
    }()

    func showAd() {
        view.addSubview(adView)
        NSLayoutConstraint.activate([
            adView.topAnchor.constraint(equalTo: loadButton.bottomAnchor, constant: 100),
            adView.centerXAnchor.constraint(equalTo: view.centerXAnchor)
        ])
    }
}
```

## 测试自适应内联横幅集成 {#test}

### 使用演示广告单元进行广告测试

<!-- source: zh/dev/_includes/test-ios-inline-banner.md -->
我们建议使用测试广告来测试您的广告集成和应用本身。

为了保证为每个广告请求返回测试广告，我们创建了一个特殊的演示广告版位 ID。用它来检查您的广告集成。

演示广告单元 ID：`demo-banner-yandex`.

{% note warning %}

在商店中发布您的应用程序之前，确保将演示版位 ID 替换为您在 Yandex Advertising Network 界面中获得的真实 ID。

{% endnote %}

您可以在 [用于测试的演示广告单元](https://ads.yandex.com/helpcenter/zh/dev/ios/demo-blocks.md) 部分找到可用的演示广告版位 ID 列表。
<!-- endsource: zh/dev/_includes/test-ios-inline-banner.md -->

### 测试广告集成

<!-- source: zh/dev/_includes/test-integration-ios.md -->
您可以使用本机控制台工具测试广告集成。

要查看详细日志，请调用 `YMAMobileAds` 类的 `enableLogging` 方法。

```swift
YMAMobileAds.enableLogging()
```

要查看 SDK 日志，请前往控制台工具并设置 `Subsystem = com.mobile.ads.ads.sdk`。您还可以按类别和错误级别过滤日志。

如果您在集成广告时遇到问题，您将获得有关问题的详细报告以及如何解决这些问题的建议。

<img src= "https://yastatic.net/s3/doc-binary/src/dev/mobile-ads/common/integration-ios-2.png">
<!-- endsource: zh/dev/_includes/test-integration-ios.md -->

## 其他资源 {#resources}

* <!-- source: zh/dev/_includes/github-pubdev-links.md -->
  [GitHub](https://github.com/yandexmobile/yandex-ads-sdk-ios/blob/master/Examples/YandexMobileAdsExample/YandexMobileAdsExample/Yandex/Banner/InlineBannerViewController.swift) 链接。
  <!-- endsource: zh/dev/_includes/github-pubdev-links.md -->

