# MGLCalloutView

    @protocol MGLCalloutView <NSObject>

A protocol for a `UIView` subclass that displays information about a selected annotation near that annotation.

To receive updates from an object that conforms to the `MGLCalloutView` protocol, use the optional methods available in the `MGLCalloutViewDelegate` protocol.

#### Related examples

See the Display custom views as callouts example to learn how to customize an `MGLCalloutView`.

- `representedObject`

  An object conforming to the `MGLAnnotation` protocol whose details this callout view displays.

  #### Declaration

  Objective-C

      @property (readwrite, strong, nonatomic)
          id<MGLAnnotation> _Nonnull representedObject;

  View Source on GitHub
- `leftAccessoryView`

  A view that the user may tap to perform an action. This view is conventionally positioned on the left side of the callout view.

  #### Declaration

  Objective-C

      @property (readwrite, strong, nonatomic) UIView *_Nonnull leftAccessoryView;

  Swift

      var leftAccessoryView: UnsafeMutablePointer<Int32> { get set }

  View Source on GitHub
- `rightAccessoryView`

  A view that the user may tap to perform an action. This view is conventionally positioned on the right side of the callout view.

  #### Declaration

  Objective-C

      @property (readwrite, strong, nonatomic) UIView *_Nonnull rightAccessoryView;

  Swift

      var rightAccessoryView: UnsafeMutablePointer<Int32> { get set }

  View Source on GitHub
- `delegate`

  An object conforming to the `MGLCalloutViewDelegate` method that receives messages related to the callout view’s interactive subviews.

  #### Declaration

  Objective-C

      @property (readwrite, nonatomic) id<MGLCalloutViewDelegate> _Nullable delegate;

  Swift

      weak var delegate: MGLCalloutViewDelegate? { get set }

  View Source on GitHub
- `-presentCalloutFromRect:inView:constrainedToView:animated:`

  Unavailable

  Use `-presentCalloutFromRect:inView:constrainedToRect:animated:` instead.

  Presents a callout view by adding it to `view` and pointing at the given rect of `view`’s bounds. Constrains the callout to the bounds of the given view.

  #### Declaration

  Objective-C

      - (void)presentCalloutFromRect:(CGRect)rect
                              inView:(nonnull UIView *)view
                   constrainedToView:(nonnull UIView *)constrainedView
                            animated:(BOOL)animated;

  View Source on GitHub
- `-presentCalloutFromRect:inView:constrainedToRect:animated:`

  Presents a callout view by adding it to `view` and pointing at the given rect of `view`’s bounds. Constrains the callout to the rect in the space of `view`.

  #### Declaration

  Objective-C

      - (void)presentCalloutFromRect:(CGRect)rect
                              inView:(nonnull UIView *)view
                   constrainedToRect:(CGRect)constrainedRect
                            animated:(BOOL)animated;

  Swift

      func presentCallout(fromRect rect: Any!, inView view: Any!, constrainedToRect constrainedRect: Any!, animated: Bool)

  View Source on GitHub
- `-dismissCalloutAnimated:`

  Dismisses the callout view.

  #### Declaration

  Objective-C

      - (void)dismissCalloutAnimated:(BOOL)animated;

  Swift

      func dismissCallout(animated: Bool)

  View Source on GitHub
- `-marginInsetsHintForPresentationFromRect:`

  If implemented, should provide margins to expand the rect the callout is presented from.

  These are used to determine positioning. Currently only the top and bottom properties of the return value are used. For example, `{ .top = -50.0, .left = -10.0, .bottom = 0.0, .right = -10.0 }` indicates a 50 point margin above the presentation origin rect (and 10 point margins to the left and the right) in which the callout is assumed to be displayed.

  There are no assumed defaults for these margins, as they should be calculated from the callout that is to be presented. For example, `SMCalloutView` generates the top margin from the callout height, but the left and right margins from a minimum width that the callout should have.

  #### Declaration

  Objective-C

      - (UIEdgeInsets)marginInsetsHintForPresentationFromRect:(CGRect)rect;

  Swift

      optional func marginInsetsHintForPresentation(from rect: Any!) -> Any!

  #### Parameters

  `rect` | Rect that the callout is presented from. This should be the same as the one passed in `-[MGLCalloutView presentCalloutFromRect:inView:constrainedToRect:animated:]`

  #### Return Value

  `UIEdgeInsets` representing the margins. Values should be negative.

  View Source on GitHub
- `anchoredToAnnotation`

  A Boolean value indicating whether the callout view should be anchored to the corresponding annotation. You can adjust the callout view’s precise location by overriding -[UIView setCenter:]. The callout view will not be anchored to the annotation if this optional property is unimplemented.

  #### Declaration

  Objective-C

      @optional
      @property (readonly, getter=isAnchoredToAnnotation, assign, nonatomic)
          BOOL anchoredToAnnotation;

  Swift

      optional var isAnchoredToAnnotation: Bool { get }

  View Source on GitHub
- `dismissesAutomatically`

  A Boolean value indicating whether the callout view should be dismissed automatically when the map view’s viewport changes. Note that a single tap on the map view still dismisses the callout view regardless of the value of this property. The callout view will be dismissed if this optional property is unimplemented.

  #### Declaration

  Objective-C

      @optional
      @property (readonly, assign, nonatomic) BOOL dismissesAutomatically;

  Swift

      optional var dismissesAutomatically: Bool { get }

  View Source on GitHub