Positioning inspector bar for NSTextView












3















It's easy to enable the "inspector bar" for text views so that a bar appears at the top of the screen with various formatting buttons. (Although I had some confusion until I learned to make sure I was selecting the text view in a scroll view, and not the scroll view itself). I can either programmatically use [textView setUsesInspectorBar:YES] or go to the Attributes Inspector and check the "Inspector Bar" box in the "Uses" section.



My question is, how can I further control the inspector bar? I'm having trouble finding information on it in the XCode documentation or online. I'd like to be able to position it in a different place on the screen. Being able to pick and choose which specific controls are in the bar would be great too.










share|improve this question



























    3















    It's easy to enable the "inspector bar" for text views so that a bar appears at the top of the screen with various formatting buttons. (Although I had some confusion until I learned to make sure I was selecting the text view in a scroll view, and not the scroll view itself). I can either programmatically use [textView setUsesInspectorBar:YES] or go to the Attributes Inspector and check the "Inspector Bar" box in the "Uses" section.



    My question is, how can I further control the inspector bar? I'm having trouble finding information on it in the XCode documentation or online. I'd like to be able to position it in a different place on the screen. Being able to pick and choose which specific controls are in the bar would be great too.










    share|improve this question

























      3












      3








      3








      It's easy to enable the "inspector bar" for text views so that a bar appears at the top of the screen with various formatting buttons. (Although I had some confusion until I learned to make sure I was selecting the text view in a scroll view, and not the scroll view itself). I can either programmatically use [textView setUsesInspectorBar:YES] or go to the Attributes Inspector and check the "Inspector Bar" box in the "Uses" section.



      My question is, how can I further control the inspector bar? I'm having trouble finding information on it in the XCode documentation or online. I'd like to be able to position it in a different place on the screen. Being able to pick and choose which specific controls are in the bar would be great too.










      share|improve this question














      It's easy to enable the "inspector bar" for text views so that a bar appears at the top of the screen with various formatting buttons. (Although I had some confusion until I learned to make sure I was selecting the text view in a scroll view, and not the scroll view itself). I can either programmatically use [textView setUsesInspectorBar:YES] or go to the Attributes Inspector and check the "Inspector Bar" box in the "Uses" section.



      My question is, how can I further control the inspector bar? I'm having trouble finding information on it in the XCode documentation or online. I'd like to be able to position it in a different place on the screen. Being able to pick and choose which specific controls are in the bar would be great too.







      objective-c xcode cocoa






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Aug 2 '12 at 20:36









      Chad SchultzChad Schultz

      4,21964472




      4,21964472
























          3 Answers
          3






          active

          oldest

          votes


















          3














          The answer is, you aren't meant to further control the inspector bar. There's nothing in the documentation because, well, there's nothing. Apple's saying, use it or don't use it.



          However, if you dig into it a bit, you will find that the inspector bar is a very interesting control. It's not displayed as part of the text view, but rather (privately) embedded in the "window view" itself. When I say "window view," I mean the superview of the content view.



          If you list the subviews of that "window view":



          NSLog(@"%@", [self.testTextView.window.contentView superview].subviews);


          You end up with:



          2012-08-02 15:59:30.145 Example[16702:303] (
          "<_NSThemeCloseWidget: 0x100523dc0>", // the close button
          "<_NSThemeWidget: 0x100525ce0>", // the minimize button?
          "<_NSThemeWidget: 0x100524e90>", // the maximize button?
          "<NSView: 0x100512ad0>", // the content view
          "<__NSInspectorBarView: 0x100529d50>", // the inspector view
          "(<NSToolbarView: 0x10054e650>: FD2E0533-AB18-4E7E-905A-AC816CB80A26)" // the toolbar
          )


          As you can see, AppKit puts the inspector bar at the same level as other top level window controls. Now this is getting into the land of private APIs, but simply tinkering with the "window view" shouldn't get any apps rejected.





          You can try to get a reference to the __NSInspectorBarView from here. It seems like it is always the subview right after the content view, so something like this may work:



          NSArray *topLevelViews = [self.testTextView.window.contentView superview].subviews;
          NSUInteger indexOfContentView = [topLevelViews indexOfObject:self.testTextView.window.contentView];
          if (indexOfContentView + 1 < topLevelViews.count) {
          NSView *inspectorBar = [topLevelViews objectAtIndex:indexOfContentView + 1];
          NSLog(@"%@", inspectorBar);
          }
          NSLog(@"%@", topLevelViews);


          Since this immediately breaks if Apple changes the ordering of the top level views, it may not be a good idea for an application for production. Another idea is:



          NSView *inspectorBarView = nil;
          for (NSView *topLevelView in topLevelViews) {
          if ([topLevelView isKindOfClass:NSClassFromString(@"__NSInspectorBarView")]) {
          inspectorBarView = topLevelView;
          }
          }
          NSLog(@"%@", inspectorBarView);


          I don't know if the use of NSClassFromString() will pass App Store review guidelines, however, since once again, it's dependent on private APIs.





          That being said, once you get a reference to the inspector bar view, things still don't work too well. You can try repositioning it at the bottom:



          if (inspectorBarView) {
          NSRect newFrame = inspectorBarView.frame;
          newFrame.origin = NSZeroPoint;
          [inspectorBarView setAutoresizingMask:NSViewMaxYMargin | NSViewMaxXMargin];
          [inspectorBarView setFrame:newFrame];
          }


          But you end up with a misdrawn toolbar, so more work would be necessary there:



          enter image description here



          My ideas would be to try to shift the content view's height up to cover up the gray left-over area (which would have to be done every time the window is resized, maybe tinkering with autoresizing masks may make it easier) and custom draw a background for the inspector bar at the bottom.



          EDIT



          Oh, and you should file a feature request for this too. bugreport.apple.com






          share|improve this answer

































            2














            This is four years late, but I feel like someone on the internet may benefit from this in the future. I spent way too long trying to figure this out.



            The inspector bar class, as the others have pointed out, seems to be a private class (__NSInspectorBarView). Therefore, it's probably not recommended to modify.



            Nevertheless! The curious have to know. The inspector bar is inserted, at the time of this post (April 2016) into the window's accessory bar. You can get a list of accessory views as of OS X 10.10 using the array property in NSWindow called titlebarAccessoryViewControllers.



            Here's some Swift 2.0 code to do just that, assuming you haven't inserted any other accessory views into the window beforehand.



            if window.titlebarAccessoryViewControllers.count > 0 {
            let textViewInspectorBar = self.titlebarAccessoryViewControllers[0].view
            let inspectorBarHeight: CGFloat = textViewInspectorBar!.frame.height // 26.0 pt
            }


            It's worth noting that accessory views are handled differently in full screen mode apps: https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/FullScreenApp/FullScreenApp.html



            I personally would not attempt to move an accessory view, as they are special kinds of views designed to stay in the toolbar (if I fully understood what I have read).



            NSTitlebarAccessoryViewController Reference:
            https://developer.apple.com/library/mac/documentation/AppKit/Reference/NSTitlebarAccessoryViewController_Class/






            share|improve this answer



















            • 1





              It's never too late to provide helpful information for other programmers! :)

              – Chad Schultz
              Apr 4 '16 at 21:00



















            0














            You cannot do anything to position this thing.
            Clearly, the corruption noted by @Vervious is real, but only if you do not have an NSToolBar.
            You see, this inspectorBar is sadly a mostly private and mostly (publicly) undocumented but awesome tool. And it is very much intended for use in a window that has an NSToolBar visible... go figure.



            After you have a toolbar added to your view
            After you have a toolbar added to your view



            Still with a toolbar but hidden, and inspector bar is cool
            (as in via the view menu or the method it invokes, which is toggleToolBarShown: and is an NSResponder friendly message )
            Still with a toolbar but hidden, and inspector bar is cool



            So it is obvious, no you cannot do much with this. It's design is poorly documented. It works as intended as a pseudo accessory view bar under the place an NSToolbar goes (which is also not adjustable)






            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f11785350%2fpositioning-inspector-bar-for-nstextview%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              3 Answers
              3






              active

              oldest

              votes








              3 Answers
              3






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              3














              The answer is, you aren't meant to further control the inspector bar. There's nothing in the documentation because, well, there's nothing. Apple's saying, use it or don't use it.



              However, if you dig into it a bit, you will find that the inspector bar is a very interesting control. It's not displayed as part of the text view, but rather (privately) embedded in the "window view" itself. When I say "window view," I mean the superview of the content view.



              If you list the subviews of that "window view":



              NSLog(@"%@", [self.testTextView.window.contentView superview].subviews);


              You end up with:



              2012-08-02 15:59:30.145 Example[16702:303] (
              "<_NSThemeCloseWidget: 0x100523dc0>", // the close button
              "<_NSThemeWidget: 0x100525ce0>", // the minimize button?
              "<_NSThemeWidget: 0x100524e90>", // the maximize button?
              "<NSView: 0x100512ad0>", // the content view
              "<__NSInspectorBarView: 0x100529d50>", // the inspector view
              "(<NSToolbarView: 0x10054e650>: FD2E0533-AB18-4E7E-905A-AC816CB80A26)" // the toolbar
              )


              As you can see, AppKit puts the inspector bar at the same level as other top level window controls. Now this is getting into the land of private APIs, but simply tinkering with the "window view" shouldn't get any apps rejected.





              You can try to get a reference to the __NSInspectorBarView from here. It seems like it is always the subview right after the content view, so something like this may work:



              NSArray *topLevelViews = [self.testTextView.window.contentView superview].subviews;
              NSUInteger indexOfContentView = [topLevelViews indexOfObject:self.testTextView.window.contentView];
              if (indexOfContentView + 1 < topLevelViews.count) {
              NSView *inspectorBar = [topLevelViews objectAtIndex:indexOfContentView + 1];
              NSLog(@"%@", inspectorBar);
              }
              NSLog(@"%@", topLevelViews);


              Since this immediately breaks if Apple changes the ordering of the top level views, it may not be a good idea for an application for production. Another idea is:



              NSView *inspectorBarView = nil;
              for (NSView *topLevelView in topLevelViews) {
              if ([topLevelView isKindOfClass:NSClassFromString(@"__NSInspectorBarView")]) {
              inspectorBarView = topLevelView;
              }
              }
              NSLog(@"%@", inspectorBarView);


              I don't know if the use of NSClassFromString() will pass App Store review guidelines, however, since once again, it's dependent on private APIs.





              That being said, once you get a reference to the inspector bar view, things still don't work too well. You can try repositioning it at the bottom:



              if (inspectorBarView) {
              NSRect newFrame = inspectorBarView.frame;
              newFrame.origin = NSZeroPoint;
              [inspectorBarView setAutoresizingMask:NSViewMaxYMargin | NSViewMaxXMargin];
              [inspectorBarView setFrame:newFrame];
              }


              But you end up with a misdrawn toolbar, so more work would be necessary there:



              enter image description here



              My ideas would be to try to shift the content view's height up to cover up the gray left-over area (which would have to be done every time the window is resized, maybe tinkering with autoresizing masks may make it easier) and custom draw a background for the inspector bar at the bottom.



              EDIT



              Oh, and you should file a feature request for this too. bugreport.apple.com






              share|improve this answer






























                3














                The answer is, you aren't meant to further control the inspector bar. There's nothing in the documentation because, well, there's nothing. Apple's saying, use it or don't use it.



                However, if you dig into it a bit, you will find that the inspector bar is a very interesting control. It's not displayed as part of the text view, but rather (privately) embedded in the "window view" itself. When I say "window view," I mean the superview of the content view.



                If you list the subviews of that "window view":



                NSLog(@"%@", [self.testTextView.window.contentView superview].subviews);


                You end up with:



                2012-08-02 15:59:30.145 Example[16702:303] (
                "<_NSThemeCloseWidget: 0x100523dc0>", // the close button
                "<_NSThemeWidget: 0x100525ce0>", // the minimize button?
                "<_NSThemeWidget: 0x100524e90>", // the maximize button?
                "<NSView: 0x100512ad0>", // the content view
                "<__NSInspectorBarView: 0x100529d50>", // the inspector view
                "(<NSToolbarView: 0x10054e650>: FD2E0533-AB18-4E7E-905A-AC816CB80A26)" // the toolbar
                )


                As you can see, AppKit puts the inspector bar at the same level as other top level window controls. Now this is getting into the land of private APIs, but simply tinkering with the "window view" shouldn't get any apps rejected.





                You can try to get a reference to the __NSInspectorBarView from here. It seems like it is always the subview right after the content view, so something like this may work:



                NSArray *topLevelViews = [self.testTextView.window.contentView superview].subviews;
                NSUInteger indexOfContentView = [topLevelViews indexOfObject:self.testTextView.window.contentView];
                if (indexOfContentView + 1 < topLevelViews.count) {
                NSView *inspectorBar = [topLevelViews objectAtIndex:indexOfContentView + 1];
                NSLog(@"%@", inspectorBar);
                }
                NSLog(@"%@", topLevelViews);


                Since this immediately breaks if Apple changes the ordering of the top level views, it may not be a good idea for an application for production. Another idea is:



                NSView *inspectorBarView = nil;
                for (NSView *topLevelView in topLevelViews) {
                if ([topLevelView isKindOfClass:NSClassFromString(@"__NSInspectorBarView")]) {
                inspectorBarView = topLevelView;
                }
                }
                NSLog(@"%@", inspectorBarView);


                I don't know if the use of NSClassFromString() will pass App Store review guidelines, however, since once again, it's dependent on private APIs.





                That being said, once you get a reference to the inspector bar view, things still don't work too well. You can try repositioning it at the bottom:



                if (inspectorBarView) {
                NSRect newFrame = inspectorBarView.frame;
                newFrame.origin = NSZeroPoint;
                [inspectorBarView setAutoresizingMask:NSViewMaxYMargin | NSViewMaxXMargin];
                [inspectorBarView setFrame:newFrame];
                }


                But you end up with a misdrawn toolbar, so more work would be necessary there:



                enter image description here



                My ideas would be to try to shift the content view's height up to cover up the gray left-over area (which would have to be done every time the window is resized, maybe tinkering with autoresizing masks may make it easier) and custom draw a background for the inspector bar at the bottom.



                EDIT



                Oh, and you should file a feature request for this too. bugreport.apple.com






                share|improve this answer




























                  3












                  3








                  3







                  The answer is, you aren't meant to further control the inspector bar. There's nothing in the documentation because, well, there's nothing. Apple's saying, use it or don't use it.



                  However, if you dig into it a bit, you will find that the inspector bar is a very interesting control. It's not displayed as part of the text view, but rather (privately) embedded in the "window view" itself. When I say "window view," I mean the superview of the content view.



                  If you list the subviews of that "window view":



                  NSLog(@"%@", [self.testTextView.window.contentView superview].subviews);


                  You end up with:



                  2012-08-02 15:59:30.145 Example[16702:303] (
                  "<_NSThemeCloseWidget: 0x100523dc0>", // the close button
                  "<_NSThemeWidget: 0x100525ce0>", // the minimize button?
                  "<_NSThemeWidget: 0x100524e90>", // the maximize button?
                  "<NSView: 0x100512ad0>", // the content view
                  "<__NSInspectorBarView: 0x100529d50>", // the inspector view
                  "(<NSToolbarView: 0x10054e650>: FD2E0533-AB18-4E7E-905A-AC816CB80A26)" // the toolbar
                  )


                  As you can see, AppKit puts the inspector bar at the same level as other top level window controls. Now this is getting into the land of private APIs, but simply tinkering with the "window view" shouldn't get any apps rejected.





                  You can try to get a reference to the __NSInspectorBarView from here. It seems like it is always the subview right after the content view, so something like this may work:



                  NSArray *topLevelViews = [self.testTextView.window.contentView superview].subviews;
                  NSUInteger indexOfContentView = [topLevelViews indexOfObject:self.testTextView.window.contentView];
                  if (indexOfContentView + 1 < topLevelViews.count) {
                  NSView *inspectorBar = [topLevelViews objectAtIndex:indexOfContentView + 1];
                  NSLog(@"%@", inspectorBar);
                  }
                  NSLog(@"%@", topLevelViews);


                  Since this immediately breaks if Apple changes the ordering of the top level views, it may not be a good idea for an application for production. Another idea is:



                  NSView *inspectorBarView = nil;
                  for (NSView *topLevelView in topLevelViews) {
                  if ([topLevelView isKindOfClass:NSClassFromString(@"__NSInspectorBarView")]) {
                  inspectorBarView = topLevelView;
                  }
                  }
                  NSLog(@"%@", inspectorBarView);


                  I don't know if the use of NSClassFromString() will pass App Store review guidelines, however, since once again, it's dependent on private APIs.





                  That being said, once you get a reference to the inspector bar view, things still don't work too well. You can try repositioning it at the bottom:



                  if (inspectorBarView) {
                  NSRect newFrame = inspectorBarView.frame;
                  newFrame.origin = NSZeroPoint;
                  [inspectorBarView setAutoresizingMask:NSViewMaxYMargin | NSViewMaxXMargin];
                  [inspectorBarView setFrame:newFrame];
                  }


                  But you end up with a misdrawn toolbar, so more work would be necessary there:



                  enter image description here



                  My ideas would be to try to shift the content view's height up to cover up the gray left-over area (which would have to be done every time the window is resized, maybe tinkering with autoresizing masks may make it easier) and custom draw a background for the inspector bar at the bottom.



                  EDIT



                  Oh, and you should file a feature request for this too. bugreport.apple.com






                  share|improve this answer















                  The answer is, you aren't meant to further control the inspector bar. There's nothing in the documentation because, well, there's nothing. Apple's saying, use it or don't use it.



                  However, if you dig into it a bit, you will find that the inspector bar is a very interesting control. It's not displayed as part of the text view, but rather (privately) embedded in the "window view" itself. When I say "window view," I mean the superview of the content view.



                  If you list the subviews of that "window view":



                  NSLog(@"%@", [self.testTextView.window.contentView superview].subviews);


                  You end up with:



                  2012-08-02 15:59:30.145 Example[16702:303] (
                  "<_NSThemeCloseWidget: 0x100523dc0>", // the close button
                  "<_NSThemeWidget: 0x100525ce0>", // the minimize button?
                  "<_NSThemeWidget: 0x100524e90>", // the maximize button?
                  "<NSView: 0x100512ad0>", // the content view
                  "<__NSInspectorBarView: 0x100529d50>", // the inspector view
                  "(<NSToolbarView: 0x10054e650>: FD2E0533-AB18-4E7E-905A-AC816CB80A26)" // the toolbar
                  )


                  As you can see, AppKit puts the inspector bar at the same level as other top level window controls. Now this is getting into the land of private APIs, but simply tinkering with the "window view" shouldn't get any apps rejected.





                  You can try to get a reference to the __NSInspectorBarView from here. It seems like it is always the subview right after the content view, so something like this may work:



                  NSArray *topLevelViews = [self.testTextView.window.contentView superview].subviews;
                  NSUInteger indexOfContentView = [topLevelViews indexOfObject:self.testTextView.window.contentView];
                  if (indexOfContentView + 1 < topLevelViews.count) {
                  NSView *inspectorBar = [topLevelViews objectAtIndex:indexOfContentView + 1];
                  NSLog(@"%@", inspectorBar);
                  }
                  NSLog(@"%@", topLevelViews);


                  Since this immediately breaks if Apple changes the ordering of the top level views, it may not be a good idea for an application for production. Another idea is:



                  NSView *inspectorBarView = nil;
                  for (NSView *topLevelView in topLevelViews) {
                  if ([topLevelView isKindOfClass:NSClassFromString(@"__NSInspectorBarView")]) {
                  inspectorBarView = topLevelView;
                  }
                  }
                  NSLog(@"%@", inspectorBarView);


                  I don't know if the use of NSClassFromString() will pass App Store review guidelines, however, since once again, it's dependent on private APIs.





                  That being said, once you get a reference to the inspector bar view, things still don't work too well. You can try repositioning it at the bottom:



                  if (inspectorBarView) {
                  NSRect newFrame = inspectorBarView.frame;
                  newFrame.origin = NSZeroPoint;
                  [inspectorBarView setAutoresizingMask:NSViewMaxYMargin | NSViewMaxXMargin];
                  [inspectorBarView setFrame:newFrame];
                  }


                  But you end up with a misdrawn toolbar, so more work would be necessary there:



                  enter image description here



                  My ideas would be to try to shift the content view's height up to cover up the gray left-over area (which would have to be done every time the window is resized, maybe tinkering with autoresizing masks may make it easier) and custom draw a background for the inspector bar at the bottom.



                  EDIT



                  Oh, and you should file a feature request for this too. bugreport.apple.com







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Aug 2 '12 at 23:30

























                  answered Aug 2 '12 at 23:24









                  VerviousVervious

                  4,65733051




                  4,65733051

























                      2














                      This is four years late, but I feel like someone on the internet may benefit from this in the future. I spent way too long trying to figure this out.



                      The inspector bar class, as the others have pointed out, seems to be a private class (__NSInspectorBarView). Therefore, it's probably not recommended to modify.



                      Nevertheless! The curious have to know. The inspector bar is inserted, at the time of this post (April 2016) into the window's accessory bar. You can get a list of accessory views as of OS X 10.10 using the array property in NSWindow called titlebarAccessoryViewControllers.



                      Here's some Swift 2.0 code to do just that, assuming you haven't inserted any other accessory views into the window beforehand.



                      if window.titlebarAccessoryViewControllers.count > 0 {
                      let textViewInspectorBar = self.titlebarAccessoryViewControllers[0].view
                      let inspectorBarHeight: CGFloat = textViewInspectorBar!.frame.height // 26.0 pt
                      }


                      It's worth noting that accessory views are handled differently in full screen mode apps: https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/FullScreenApp/FullScreenApp.html



                      I personally would not attempt to move an accessory view, as they are special kinds of views designed to stay in the toolbar (if I fully understood what I have read).



                      NSTitlebarAccessoryViewController Reference:
                      https://developer.apple.com/library/mac/documentation/AppKit/Reference/NSTitlebarAccessoryViewController_Class/






                      share|improve this answer



















                      • 1





                        It's never too late to provide helpful information for other programmers! :)

                        – Chad Schultz
                        Apr 4 '16 at 21:00
















                      2














                      This is four years late, but I feel like someone on the internet may benefit from this in the future. I spent way too long trying to figure this out.



                      The inspector bar class, as the others have pointed out, seems to be a private class (__NSInspectorBarView). Therefore, it's probably not recommended to modify.



                      Nevertheless! The curious have to know. The inspector bar is inserted, at the time of this post (April 2016) into the window's accessory bar. You can get a list of accessory views as of OS X 10.10 using the array property in NSWindow called titlebarAccessoryViewControllers.



                      Here's some Swift 2.0 code to do just that, assuming you haven't inserted any other accessory views into the window beforehand.



                      if window.titlebarAccessoryViewControllers.count > 0 {
                      let textViewInspectorBar = self.titlebarAccessoryViewControllers[0].view
                      let inspectorBarHeight: CGFloat = textViewInspectorBar!.frame.height // 26.0 pt
                      }


                      It's worth noting that accessory views are handled differently in full screen mode apps: https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/FullScreenApp/FullScreenApp.html



                      I personally would not attempt to move an accessory view, as they are special kinds of views designed to stay in the toolbar (if I fully understood what I have read).



                      NSTitlebarAccessoryViewController Reference:
                      https://developer.apple.com/library/mac/documentation/AppKit/Reference/NSTitlebarAccessoryViewController_Class/






                      share|improve this answer



















                      • 1





                        It's never too late to provide helpful information for other programmers! :)

                        – Chad Schultz
                        Apr 4 '16 at 21:00














                      2












                      2








                      2







                      This is four years late, but I feel like someone on the internet may benefit from this in the future. I spent way too long trying to figure this out.



                      The inspector bar class, as the others have pointed out, seems to be a private class (__NSInspectorBarView). Therefore, it's probably not recommended to modify.



                      Nevertheless! The curious have to know. The inspector bar is inserted, at the time of this post (April 2016) into the window's accessory bar. You can get a list of accessory views as of OS X 10.10 using the array property in NSWindow called titlebarAccessoryViewControllers.



                      Here's some Swift 2.0 code to do just that, assuming you haven't inserted any other accessory views into the window beforehand.



                      if window.titlebarAccessoryViewControllers.count > 0 {
                      let textViewInspectorBar = self.titlebarAccessoryViewControllers[0].view
                      let inspectorBarHeight: CGFloat = textViewInspectorBar!.frame.height // 26.0 pt
                      }


                      It's worth noting that accessory views are handled differently in full screen mode apps: https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/FullScreenApp/FullScreenApp.html



                      I personally would not attempt to move an accessory view, as they are special kinds of views designed to stay in the toolbar (if I fully understood what I have read).



                      NSTitlebarAccessoryViewController Reference:
                      https://developer.apple.com/library/mac/documentation/AppKit/Reference/NSTitlebarAccessoryViewController_Class/






                      share|improve this answer













                      This is four years late, but I feel like someone on the internet may benefit from this in the future. I spent way too long trying to figure this out.



                      The inspector bar class, as the others have pointed out, seems to be a private class (__NSInspectorBarView). Therefore, it's probably not recommended to modify.



                      Nevertheless! The curious have to know. The inspector bar is inserted, at the time of this post (April 2016) into the window's accessory bar. You can get a list of accessory views as of OS X 10.10 using the array property in NSWindow called titlebarAccessoryViewControllers.



                      Here's some Swift 2.0 code to do just that, assuming you haven't inserted any other accessory views into the window beforehand.



                      if window.titlebarAccessoryViewControllers.count > 0 {
                      let textViewInspectorBar = self.titlebarAccessoryViewControllers[0].view
                      let inspectorBarHeight: CGFloat = textViewInspectorBar!.frame.height // 26.0 pt
                      }


                      It's worth noting that accessory views are handled differently in full screen mode apps: https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/FullScreenApp/FullScreenApp.html



                      I personally would not attempt to move an accessory view, as they are special kinds of views designed to stay in the toolbar (if I fully understood what I have read).



                      NSTitlebarAccessoryViewController Reference:
                      https://developer.apple.com/library/mac/documentation/AppKit/Reference/NSTitlebarAccessoryViewController_Class/







                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered Apr 3 '16 at 4:56









                      Joseph E.Joseph E.

                      17713




                      17713








                      • 1





                        It's never too late to provide helpful information for other programmers! :)

                        – Chad Schultz
                        Apr 4 '16 at 21:00














                      • 1





                        It's never too late to provide helpful information for other programmers! :)

                        – Chad Schultz
                        Apr 4 '16 at 21:00








                      1




                      1





                      It's never too late to provide helpful information for other programmers! :)

                      – Chad Schultz
                      Apr 4 '16 at 21:00





                      It's never too late to provide helpful information for other programmers! :)

                      – Chad Schultz
                      Apr 4 '16 at 21:00











                      0














                      You cannot do anything to position this thing.
                      Clearly, the corruption noted by @Vervious is real, but only if you do not have an NSToolBar.
                      You see, this inspectorBar is sadly a mostly private and mostly (publicly) undocumented but awesome tool. And it is very much intended for use in a window that has an NSToolBar visible... go figure.



                      After you have a toolbar added to your view
                      After you have a toolbar added to your view



                      Still with a toolbar but hidden, and inspector bar is cool
                      (as in via the view menu or the method it invokes, which is toggleToolBarShown: and is an NSResponder friendly message )
                      Still with a toolbar but hidden, and inspector bar is cool



                      So it is obvious, no you cannot do much with this. It's design is poorly documented. It works as intended as a pseudo accessory view bar under the place an NSToolbar goes (which is also not adjustable)






                      share|improve this answer




























                        0














                        You cannot do anything to position this thing.
                        Clearly, the corruption noted by @Vervious is real, but only if you do not have an NSToolBar.
                        You see, this inspectorBar is sadly a mostly private and mostly (publicly) undocumented but awesome tool. And it is very much intended for use in a window that has an NSToolBar visible... go figure.



                        After you have a toolbar added to your view
                        After you have a toolbar added to your view



                        Still with a toolbar but hidden, and inspector bar is cool
                        (as in via the view menu or the method it invokes, which is toggleToolBarShown: and is an NSResponder friendly message )
                        Still with a toolbar but hidden, and inspector bar is cool



                        So it is obvious, no you cannot do much with this. It's design is poorly documented. It works as intended as a pseudo accessory view bar under the place an NSToolbar goes (which is also not adjustable)






                        share|improve this answer


























                          0












                          0








                          0







                          You cannot do anything to position this thing.
                          Clearly, the corruption noted by @Vervious is real, but only if you do not have an NSToolBar.
                          You see, this inspectorBar is sadly a mostly private and mostly (publicly) undocumented but awesome tool. And it is very much intended for use in a window that has an NSToolBar visible... go figure.



                          After you have a toolbar added to your view
                          After you have a toolbar added to your view



                          Still with a toolbar but hidden, and inspector bar is cool
                          (as in via the view menu or the method it invokes, which is toggleToolBarShown: and is an NSResponder friendly message )
                          Still with a toolbar but hidden, and inspector bar is cool



                          So it is obvious, no you cannot do much with this. It's design is poorly documented. It works as intended as a pseudo accessory view bar under the place an NSToolbar goes (which is also not adjustable)






                          share|improve this answer













                          You cannot do anything to position this thing.
                          Clearly, the corruption noted by @Vervious is real, but only if you do not have an NSToolBar.
                          You see, this inspectorBar is sadly a mostly private and mostly (publicly) undocumented but awesome tool. And it is very much intended for use in a window that has an NSToolBar visible... go figure.



                          After you have a toolbar added to your view
                          After you have a toolbar added to your view



                          Still with a toolbar but hidden, and inspector bar is cool
                          (as in via the view menu or the method it invokes, which is toggleToolBarShown: and is an NSResponder friendly message )
                          Still with a toolbar but hidden, and inspector bar is cool



                          So it is obvious, no you cannot do much with this. It's design is poorly documented. It works as intended as a pseudo accessory view bar under the place an NSToolbar goes (which is also not adjustable)







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Aug 27 '14 at 15:36









                          uchuugakauchuugaka

                          11k62754




                          11k62754






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f11785350%2fpositioning-inspector-bar-for-nstextview%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Wiesbaden

                              Marschland

                              Dieringhausen